win7 建设网站服务器,wordpress 更改自带域名,服务商的定义是什么意思,宁夏小蚁人网站建设Linux C/C 开发(后端/音视频/游戏/嵌入式/高性能网络/存储/基础架构/安全)
c中一个类中无非有四种成员#xff1a;静态数据成员和非静态数据成员#xff0c;静态函数和非静态函数。
1.非静态数据成员被放在每一个对象体内作为对象专有的数据成员。 2.静态数据成员被提取出来…Linux C/C 开发(后端/音视频/游戏/嵌入式/高性能网络/存储/基础架构/安全)
c中一个类中无非有四种成员静态数据成员和非静态数据成员静态函数和非静态函数。
1.非静态数据成员被放在每一个对象体内作为对象专有的数据成员。 2.静态数据成员被提取出来放在程序的静态数据区内为该类所有对象共享因此只存在一份。 3.静态和非静态成员函数最终都被提取出来放在程序的代码段中并为该类所有对象共享因此每一个成员函数也只能存在一份代码实体。在c中类的成员函数都是保存在静态存储区中的 那静态函数也是保存在静态存储区中的他们都是在类中保存同一个惫份。
因此构成对象本身的只有数据任何成员函数都不隶属于任何一个对象非静态成员函数与对象的关系就是绑定绑定的中介就是this指针。成员函数为该类所有对象共享不仅是处于简化语言实现、节省存储的目的而且是为了使同类对象有一致的行为。同类对象的行为虽然一致但是操作不同的数据成员。
#includeiostream.h
class A
{
private:int x;int y;
public:void sety(){y5;}void print(){coutxxendlyyendl;}
};
void main()
{A a;a.sety();a.print();int *p(int *)a;//对象a的内存模型里面只有非静态数据成员所以是合理的。*p6;a.print();
}4.单继承的对象的内存布局第一个为虚函数表指针vtbl其后为成员且先基类后子类虚函数表里包含了所有的虚函数的地址以NULL结束。 虚函数如果子类有重写就由子类的重新的代替。 添加图片注释不超过 140 字可选
上述类图的解释B的v2覆盖了A的v2C的v1覆盖了A的v1C的v3覆盖了B的v3.
注意发生覆盖的特征有
不同的范围分别位于派生类与基类函数名字相同参数相同基类函数必须有virtual关键字。
成员函数被重载的特征
1相同的范围在同一个类中 2函数名字相同 3参数不同 4virtual 关键字可有可无。
“隐藏”是指派生类的函数屏蔽了与其同名的基类函数规则如下
1如果派生类的函数与基类的函数同名但是参数不同。此时不论有无virtual关键字基类的函数将被隐藏注意别与重载混淆。 2如果派生类的函数与基类的函数同名并且参数也相同但是基类函数没有virtual 关键字。此时基类的函数被隐藏注意别与覆盖混淆
类C的对象的内存模型为 单继承的对象的布局第一个为虚函数表指针vtbl其后为成员且先基类后子类虚函数表里包含了所有的虚函数的地址以NULL结束。虚函数如果子类有重写就由子类的重新的代替。
5.与单继承相同的是所有的虚函数都包含在虚函数表中所不同的多重继承有多个虚函数表当子类对父类的虚函数有重写时子类的函数替换父类的函数在对应的虚函数位置当子类有新的虚函数时这些虚函数被加在第一个虚函数表的后面。 对类图的解释D的v3覆盖了B3的v3另外D有一个新的虚函数vD。
class D 的内存模型 总结与单继承相同的是所有的虚函数都包含在虚函数表中所不同的多重继承有多个虚函数表**当子类对父类的虚函数有重写时子类的函数覆盖父类的函数在对应的虚函数位置当子类有新的虚函数时这些虚函数被加在第一个虚函数表的后面**
6.虚继承使公共的基类在子类中只有一份我们看到虚继承在多重继承的基础上多了vbtable来存储到公共基类的偏移。 类图的解释D2覆盖了B的vBGD覆盖了D1的vD1同时也覆盖B的vBGD也有自己的虚函数vGD。
class GD的内存模型 总结虚继承使公共的基类在子类中只有一份我们看到虚继承在多重继承的基础上多了vbtable来存储到公共基类的偏移 整理了一些学习书籍、视频资料Linux C 后端/音视频/游戏/嵌入式/高性能网络/存储/基础架构/安全 学习资料、教学视频和学习路线图有需要的可以自行添加学习交流群739729163 领取哦