您的位置:首页 > 编程语言 > C语言/C++

C++子类的内存结构和继承方式

2014-06-20 10:03 120 查看
在C++中,如果类有虚函数,则在类对象的内存最开始的地方存放一个虚函数表的指针,接着是成员变量;如果是子类,则是父类的一个拷贝,其中

包括虚函数表指针(如果有虚函数的话)和父类成员变量,之后是子类的成员变量。类继承的方式有三种,public,protected,private;这些就像类成员的保护

机制一样,是由编译器来控制的,内存中并没有这种保护机制。通过下面的例子,组合和继承对于子类的成员变量的存储方式基本是相同,只是子类要求父类拷贝

必须在子类内存的前面。





主要区别是对类的成员的访问机制上,组合只能通过类对象来访问对象的成员变量和成员函数;继承的访问方式



其中,子类中访问权限一栏,是父类被子类继承后,相当于在子类中的权限,即子类有四种访问控制权限:public,protected,private,no access;

通过private继承,父类的public和protected权限变成了private,子类的成员函数仍是可以访问的。但子类的子类是无法访问的。

附上:其中组合和继承的类的大小不同是由于对象变量的存储顺序不同,根据内存的对齐机制所以大小不同。

#include <iostream>
using namespace std;
class base{
public:
	base():a(0),b(1),c(2){}
	int a;
protected:
	int b;
private:
	int c;
};
class wangt:public base{
public:
	wangt():h('a'),j('b'),k('c'),base(){};
	char h;
protected:
	char j;
private:
	char k;
};
class wa{
public:
	wa():h('a'),j('b'),k('c'),b(){};
	char h;
	base b;
protected:
	char j;
private:
	char k;
};
int main()
{
	wangt* w = new wangt;
	cout <<"sizeof(wangt): "<< sizeof(wangt) << endl;
	wa *a = new wa;
	cout <<"sizeof(wa): "<< sizeof(wa) << endl;
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: