c++继承
作用:减少重复代码
语法:class 子类 : 继承方式 父类
class A : public B;
子类:也成为派生类
父类:也称为基类
继承方式
1,公共继承:父类的公共成员到子类变为 公共成员
2,保护继承:父类的公共成员到子类变为 保护成员
3,私有继承:父类的公共成员到子类变为私有成员
继承中的对象模型
查看类对象模型:
vs开发人员命令提示符
跳转路径 cd
cl /d1 reportSingleClassLayoutSon "文件"如下图:
继承中的构造和析构顺序
子类继承父类后,当创建子类对象,也会调用父类的构造函数。
1,继承中先调用父类的构造函数再调用子类的构造函数
2,继承中先调用子类的析构函数再调用父类的析构函数。
#include <iostream>
using namespace std;
class Base
{
public:
int a;
int b;
Base()
{
cout << "父类的构造函数" << endl;
}
~Base()
{
cout << "父类的析构函数" << endl;
}
void func()
{
a = 100;
b = 100;
}
private:
int c;
};
class Base01:public Base
{
public:
Base01()
{
cout << "子类的构造函数" << endl;
}
~Base01()
{
cout << "子类的析构函数" << endl;
}
void func()
{
a = 100;
}
private:
};
void test01()
{
Base01 p2;
}
int main()
{
test01();
system("pasue");
return 0;
}
继承同名成员的处理方式
1,访问子类同名成员,直接访问即可
2,访问父类同名成员,需要加作用域(Base)
注意:
要是父类出现方法重载。子类只会调用其中一个,掩藏其它重载
#include <iostream>
using namespace std;
class Base
{
public:
int a;
int b;
Base()
{
a = 100;
}
};
class Base01:public Base
{
public:
int a;
Base01()
{
a = 200;
}
private:
};
void test01()
{
Base01 p2;
cout << "访问父类同名成员" << p2.Base::a << endl;
cout << "访问子类类同名成员" << p2.a << endl;
}
int main()
{
test01();
system("pause");
return 0;
}
继承同名静态成员处理方式
静态成员和非静态成员出现同名,处理方式一样
1,访问子类同名成员,直接访问即可
2,访问父类同名成员,需要加作用域(Base)
多继承
语法:
class 子类 : 继承方式 父类1,继承方式 父类2…
菱形继承问题:
1,重写:
1,在类前面添加virtual.可重写基类相同的变量和相同名字方法
2,方法