我的问题与派生C ++类的对象的内存状态有关。在此示例中,派生类继承了操纵私有成员的公共成员函数。
class Base {
int a;
public:
int b;
void write_a(int a_in);
int read_a();
};
void Base :: write_a(int a_in){
a = a_in;
}
int Base :: read_a(){
return a;
}
class Derived : public Base {
int c;
public:
void write_c(int c_in);
int read_c();
};
void Derived :: write_c(int c_in){
c = c_in;
}
int Derived :: read_c(){
return c;
}
int main(){
Derived D;
D.write_a(3);
cout << D.read_a() << endl;
}
程序将打印“ 3”。理想情况下,对象D应该仅具有“ b”和“ c”作为其数据变量。但是,从程序看来,它也存储了“ a”。 派生类对象D的内存如何组织?
答案 0 :(得分:1)
对象D的数据变量应仅包含'b'和'c'
不。创建继承只是为了防止编码器重复代码,例如,您有一段代码,并且该代码应位于两个不同的类中,然后您创建一个Base
类并将其放入代码写入基类,而不是两次编写相同的代码。因此,派生类包含基类。
似乎它也在存储“ a”。派生类对象D的内存如何组织?
是的,Derived
类也存储了a
,并且自然地a
占用了一些内存(因为a
是一个int,其大小取决于您的系统体系结构),但是那部分Derived
类无法访问内存。这就是protected关键字的来源。