派生类中的数据元素

时间:2018-12-18 17:31:17

标签: c++

我的问题与派生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的内存如何组织?

1 个答案:

答案 0 :(得分:1)

  

对象D的数据变量应仅包含'b'和'c'

不。创建继承只是为了防止编码器重复代码,例如,您有一段代码,并且该代码应位于两个不同的类中,然后您创建一个Base类并将其放入代码写入基类,而不是两次编写相同的代码。因此,派生类包含基类。

  

似乎它也在存储“ a”。派生类对象D的内存如何组织?

是的,Derived类也存储了a,并且自然地a占用了一些内存(因为a是一个int,其大小取决于您的系统体系结构),但是那部分Derived类无法访问内存。这就是protected关键字的来源。