c++ - 派生类对象是否包含基类的私有(private)成员?它在内存中是什么样子的?

标签 c++ class inheritance radix derived

class base{
private:
  int a;
public:
  int b;
  void setData(){
    a = 10; b = 5;
  }
};
class derived: public base{
private:    
   int c;
public:
  // b is inherited
};

void main(){
  derived D1;

  D1.setData();
}

我了解到私有(private)成员不会被继承。因此,私有(private)变量 a(在基类中)不存在于派生类对象中。我的问题是 当调用 D1.setData() 时,如果 a 不存在,它如何为 a 赋值? 我很确定我的这个概念是错误的,所以有人可以解释一下这是如何工作的吗?派生类对象创建时基类成员是否也创建了?

最佳答案

I learned that private members aren't inherited.

当然它们是继承的:否则,需要这些私有(private)变量的基类的所有成员函数都会被破坏。尽管继承类无法访问私有(private)成员,但基类保留对它们的完全访问权限。

Can some one explain how this works?

继承类 derived 的布局包括一个存储基类私有(private)成员 a 的地方。基类的所有方法都可以访问base::a。同时,派生类仍然无法访问它:任何从 derived 访问 a 的尝试都会导致编译时错误。

关于c++ - 派生类对象是否包含基类的私有(private)成员?它在内存中是什么样子的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29328149/

相关文章:

c++ - 调整窗体大小时调整控件大小

Java数据文件在类之间共享

c++ - 没有模板参数的模板类的容器

c++ - 虚拟继承、默认构造函数和额外复制

c++ - 向 C++ 程序员解释 ML 类型推断

c++ - 使用 Rcpp 制作包并尝试让一个类引用另一个类

c++ - Visual C++ - 匿名方法

python - 为什么 python exec Define class 不起作用

java - Java 继承的问题

c++ - 在基类中返回抽象类型