目录
class 子类:继承方式 父类
class son : public base{};
继承方式:
公有继承:
class Son1 : public Base1{};
public,子类可以访问父类的public和protected,不能访问private。
子类继承父类的属性,原本的public 和 protected权限不变。
类外不能访问protected
保护继承:
class Son2 : protected Base1{};
父类中的公有成员到子类中变为 protected权限
父类中的protected成员到子类中变为 protected权限
私有继承:
class Son3 : private Base1{};
父类中的公有成员到子类中变为 private权限
父类中的protected成员到子类中变为 private权限
子类继承了父类所有非静态成员属性,私有属性只是不显示,实际继承了。
继承构造和析构顺序
构造顺序
先父类后子类
析构顺序
先子类后父类
同名成员处理
Son1 s1;
同名成员属性
子类对象访问子类成员 直接访问
cout<<s.m_A<<endl;
子类对象访问父类成员 加作用域
cout<<s.Base1::m_A<<endl;
同名成员函数
cout<<s.func()<<endl;
cout<<s.Base1::func()<<endl;
子类中出现与父类同名的成员函数,子类的同名成员会隐藏掉父类中所有同名成员函数
想访问父类中被隐藏的同名成员函数,加作用域
同名静态成员
子类对象可以直接访问子类
访问父类要加作用域
多继承
语法
class Son : public Base1,public Base2{};
父类有同名成员时,子类访问父类要加作用域
s.Base1::m_A;
s.Base2::m_A;
菱形继承
两个子类继承一个父类,又有一个子类继承这两个子类。如羊、驼继承动物类,羊驼继承羊、驼。
羊驼要同时继承两份数据,导致资源浪费。利用虚继承解决。
class Sheep::virtual public Animal{};
class Tuo::virtual public Animal{};
虚继承 Animal是虚基类