类与类之间具有公共部分和非公共部分
————我们定义多个类的时候,采用继承的方法,减少代码重复
继承语法:class 子类(也称派生类) : 继承方式 父类(也称基类)
注意:继承是对语法的优化,对类对象没有影响
——————如继承有int a;那么构建类时,一定会构建a;
//继承的技术写相似结构体
class base{
public:
void header(){
cout<<"----------head---------"<<endl;
}
void footer(){
cout<<"----------foot---------"<<endl;
}
};
class Pathon:public base{//继承公共页面
public:
void contend(){
cout<<"------------Pathon---------"<<endl;
}
};
class Java:public base{
public:
void contend(){
cout<<"------------Java---------"<<endl;
}
};
继承方式(public,protected,pricate)
注意:
Public<protect<private(权限只能从左往右变化)
继承构造和析构的顺序
base 构造函数
son 构造函数
son 析构函数
base 构造函数
子类父类成员名处理方式
子类调用父类同名成员或者成员函数:
son.base::a;
son.base::func();
class base{
public:
int a;
}
class son : public base{
int a;
}
son b;
b.base::a用来调用父类的值
同名静态成员处理
静态成员属性:(可通过对象访问;可通过类名来访问)
1、编译阶段分配内存
2、类内声明,类外初始化
3、所有对象共享同一份数据
通过对象访问: son.base::a(父类);son.a(子类);
通过类名来访问: son::base::a(父类);son::a(子类);
调用静态函数同理
多继承
class 子类 : 继承方式 父类1,继承方式 父类2........
(实际项目中不建议使用)
菱形继承
问题: 菱形继承会引发两个父类具有相同的对象;
利用虚继承(class sheep :virtual public animal{};)会自动合并两个同名对象
当我们使用virtual去虚化base,实际上就是把对象的继承转变成了指针的继承(通过偏移量继承)