You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;   
}

问题解答

  1. 基类的私有成员是否会占用子类对象的内存空间?
    会占用。私有成员只是子类无法直接访问,但它仍然是子类对象内存布局的一部分。子类对象本质上包含了基类的所有成员(包括私有),只是访问权限被限制了。你通过基类的公有成员函数get()能拿到a的值,正是因为这个a就存在于子类对象的内存里,get()作为基类的成员函数,有权限访问这个属于当前对象的私有成员。

  2. 公有和保护成员是否占用子类对象的内存空间?
    当然会。公有和保护成员会被继承,并且是子类对象内存的一部分,子类可以直接访问保护成员,也可以直接访问公有成员,这些成员的数据就存储在子类对象的内存区域中。

关于你的困惑

创建子类对象后,访问基类的私有、保护成员时,都是从当前子类对象自己的内存中读取数据。子类对象包含了基类的所有成员数据,不管访问权限如何,这些数据都属于该对象的一部分。访问权限只是限制了哪些代码可以直接操作这些数据,而不是决定它们是否存在于对象内存中。

内容的提问来源于stack exchange,提问作者jony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 17:44:51