1.继承中的构造和析构
--执行顺序--
父类构造
子类构造
析构子类
析构父类
2.继承中同名成员的处理
1.当子类和父类有同名成员时,子类的同名成员会隐藏父类的同名成员
class fa
{
public:
int c = 0x11;
private:
};
class son :public fa
{
public:
int c = 0x8;
};
int main()
{
son w;
printf("%x", w.c);
printf("%x", w.fa::c);
}
0x005FFA90 00000011 00000008 对象空间内还是存储这值
1.当子类和父类有同名成员时,子类的同名函数会隐藏父类的同名函数
3.继承中静态成员特性
1.静态成员可以被继承
2.继承中的静态成员变量一样会被同名的子类成员变量隐藏
3.继承中的静态成员函数中,子类和父类有同名静态函数时,父类的所以重载函数被隐藏
4.改变从基类继承过来的静态函数的某个特征,返回值或者参数
5.静态成员函数不能是虚函数
6.菱形继承
虚继承解决菱形继承问题
a
b c -继承 a
d--继承 b c
产生二义性问题
父类虚继承祖类,用virtual关键字
静态联编
早绑定
ff 汇编
1.编译阶段确定了函数地址
动态联编
晚绑定
e8 汇编
也就是 用virtual关键字 使函数成为虚函数
多态
1.同一个函数 因为对象不同执行不同的代码
include
using namespace std;
class a
{
public:
int c = 0;
void virtual testa()
{
printf("a");
}
private:
};
class b :public a
{
public:
void testa()
{
printf("b");
}
private:
};
class c :public a
{
public:
void testa()
{
printf("c");
}
private:
};
void doa(a* pp)
{
pp->testa();
}
void test()
{
a* gg = NULL;
gg = new b;
gg->testa();
gg = new c;
doa(gg);
}
int main()
{
test();
//printf("%d", son::c);
}
虚函数表
virtual 函数过大生成的一张表
子类 转换父类 向上造型 安全
父类 转 子类 向下 不安全