继承:继承是指一个对象直接使用另一对象的属性和方法。(继承是一种复用手段,共享公有的东西,实现各自不同的东西)
类的继承:新类(派生类/子类)从已有类(基类/父类)得到已有的特性。
理解:派生类不仅具有基类的属性,还有自己特有的属性。
继承方式和成员访问限定符
从基类继承来的成员在派生类的访问属性是由继承方式控制的。
类的继承方式: public(公有继承) protected(保护继承) private(私有继承)
公有继承时,基类的非私有成员在子类的访问属性都不变。
保护继承时,基类的非私有成员在子类的保护成员。
私有继承时,基类的非私有成员在子类的私有成员。
成员访问限定符也有三: public(公有) protected(保护) private(私有)
public: 访问不受限制
protected:访问范围限定于它所属的类或该类的派生类。
private:访问范围限定于它所属的类。
class Person//基类
{
public :
void Display ()
{
cout<<_name <<endl;
}
protected :
string _name ; // 姓名
int age;
};
class Student : <span style="background-color: rgb(255, 204, 204);">public</span> Person //学生类继承了父类的_name和age,就不需要再次定义
{
protected :
int _num1 ; // 学号 是学生类特有的属性
};
class Teacher:public Person
{
protected:
int _num2; //工号 是教师类特有的属性
赋值兼容规则
1. 子类对象可以赋值给父类对象
2. 父类对象不能赋值给子类对象
3. 父类的指针/引用可以指向子类对象
4. 子类的指针/引用不能指向父类对
理解:子类有父类的属性,但父类不一定有子类的属性。学生一定是人,但人不一定是学生。
如果在子类定义了一个成员变量与父类相同(子类成员覆盖了父类成员/重定义),则子类将访问子类中的成员。如果我想要访问父类的成员,则 “ 基类::基类成员 ” 访问。
单继承和多继承
菱形继承
class Person {
public :
string _name ; <span style="font-family: arial, sans-serif;"> // 姓名</span>
<span style="font-family: arial, sans-serif;"> };</span>
class Student : public Person
{
protected :
int _num ; //学号
};
class Teacher : public Person
{ protected :
int _id ; // 工号 };
class Assistant : public Student, public Teacher
{
protected :
string _majorCourse ; // 主修课程
};