C++私有与保护成员继承:子类对象内存与访问权限疑问
关于C++继承中基类成员内存占用的问题
代码示例
#include <iostream> using namespace std; // Base class class Base { private: int a = 10; public: void get () { cout << "Get:" << a << endl; } }; // Derived class class Child : public Base { }; int main() { Child Childobj; Childobj.get(); return 0; }
问题解答
基类的私有成员是否会占用子类对象的内存空间?
会占用。私有成员只是子类无法直接访问,但它仍然是子类对象内存布局的一部分。子类对象本质上包含了基类的所有成员(包括私有),只是访问权限被限制了。你通过基类的公有成员函数get()能拿到a的值,正是因为这个a就存在于子类对象的内存里,get()作为基类的成员函数,有权限访问这个属于当前对象的私有成员。公有和保护成员是否占用子类对象的内存空间?
当然会。公有和保护成员会被继承,并且是子类对象内存的一部分,子类可以直接访问保护成员,也可以直接访问公有成员,这些成员的数据就存储在子类对象的内存区域中。
关于你的困惑
创建子类对象后,访问基类的私有、保护成员时,都是从当前子类对象自己的内存中读取数据。子类对象包含了基类的所有成员数据,不管访问权限如何,这些数据都属于该对象的一部分。访问权限只是限制了哪些代码可以直接操作这些数据,而不是决定它们是否存在于对象内存中。
内容的提问来源于stack exchange,提问作者jony
相关产品推荐
相关产品推荐

