2018/5/4
1.继承的简单介绍
1.继承相当于父与子的关系,在C++中存在一种关系,分为父类和子类,子类可以"继承"父类的属性和行为,但是不能继承父类的构造方法
2.简而言之,就是根据已有的类派生出一个新的类(继承的类称为父类,产生的新类叫派生类)
3.单继承:
1.操作方式
class 派生类名:继承方式 基类名1,继承方式 基类2...
{
派生成员声明;
};
代码:
//类的特征 继承与派生
//2018.5.4 C++
//依据已有的类来派生出一个新的类
//由两个和两个以上的父类进行继承称为多继承
//class 派生类名:继承方式 基类名1,继承方式 基类名2(单继承)
#include<iostream>
#include<stdlib.h>
//1.Pupil
class Pupil
{
private:
double chinese_grade;
double math_grade;
public:
Pupil() {};//默认构造
Pupil(double chinese_grade, double math_grade)//带参构造
{
this->chinese_grade = chinese_grade;
this->math_grade = math_grade;
}
double getChineseGrade()
{
return chinese_grade;
}
double getMathGrade()
{
return math_grade;
}
void show_pupilGrade()
{
std::cout << "语文成绩为" << getChineseGrade() << std::endl;
std::cout << "数学成绩为" << getMathGrade() << std::endl;
}
};
//派生类1 Junior
class Junior :public Pupil//继承
{
private:
double English_grade;
double Chemistry_grade;
double Physics_grade;
public:
Junior() {};//默认构造
Junior(double English_grade, double Chemistry_grade,double Physics_grade)//带参构造
{
this->English_grade = English_grade;
this->Chemistry_grade = Chemistry_grade;
this->Physics_grade = Physics_grade;
}
double getEnglish_grade()
{
return English_grade;
}
double getChemistry_grade()
{
return Chemistry_grade;
}
double getPhysics_grade()
{
return Physics_grade;
}
void show_juniorGrade()
{
std::cout << "英语成绩为" << getEnglish_grade() << std::endl;
std::cout << "化学成绩为" << getChemistry_grade() << std::endl;
std::cout << "物理成绩为" << getPhysics_grade() << std::endl;
}
};
//2.派生类2 Senior
class Senior :public Junior
{
private:
double computer_grade;
public:
Senior() {};
Senior(double computer_grade)
{
this->computer_grade = computer_grade;
}
double getComputerGrade()
{
return computer_grade;
}
void show_seniorGrade()
{
std::cout << "计算机成绩为" << getComputerGrade() << std::endl;
}
};
#include"text.h"
void main()
{
Pupil stu1(90.5,80);
stu1.show_pupilGrade();
Junior stu2(99, 88, 99);
stu2.show_juniorGrade();
Senior stu3(100);
stu3.show_seniorGrade();
system("pause");
}
2.多继承(multiple inheritance)
1.使用情况:当继承关系比较复杂的时候使用
当对象中的关系比较复杂的时候使用多继承,比如说:A是基类,B和C是A的子类,但是D是B和C的综合,所以这个时候使用单继承的方法
不适用,因而采用多继承的方法
2.语法:class A:public B,public C//说明A继承了B和C的方法,也说明了A是B和C的综合体*/
3.虚继承
虚继承是解决C++多重继承问题的一种手段,从不同途径继承来的同一基类,会在子类中存在多份拷贝。这将存在两个问题:其一,浪费存储空间;第二,存在二义性问题,通常可以将派生类对象的地址赋值给基类对象,实现的具体方式是,将基类指针指向继承类(继承类有基类的拷贝)中的基类对象的地址,但是多重继承可能存在一个基类的多份拷贝,这就出现了二义性;所以采用虚继承的方式;
简单而言就是在继承的时候,为了解决二义性,最终只有基类的一份拷贝(为了解决多重继承而存在)
class CA
{
int k;
public:
void fun() {
cout << "CA::f" << endl;}
};
class CB : virtual public CA//虚继承
{ //实际上这两种方法都可以
};
class CC : virtual public CA//虚继承
{
};
class CD : public CB, public CC//使用多重继承
{
};
注:解决二义性
1.使用虚继承
2.使用方法的重写
注:继承权限符号相关介绍(转载)
一个派生类继承了所有的基类方法,但下列情况除外:
1基类的构造函数、析构函数和拷贝构造函数。
2基类的重载运算符。
3基类的友元函数
二:
公有继承(public):当一个类派生自公有基类时,
基类的公有成员也是派生类的公有成员,
基类的保护成员也是派生类的保护成员,
基类的私有成员不能直接被派生类访问,
但是可以通过调用基类的公有和保护成员来访问。
保护继承(protected): 当一个类派生自保护基类时,
基类的公有和保护成员将成为派生类的保护成员。
私有继承(private):当一个类派生自私有基类时,
基类的公有和保护成员将成为派生类的私有成员,访问时需用接口