[c++07]成员变量在继承中的约束

Posted AIplusX

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[c++07]成员变量在继承中的约束相关的知识,希望对你有一定的参考价值。

写在前面

这篇文章要分享的是父类的成员变量在private,public,protected三种限制情况下的继承与约束关系。

正文

首先来看看,在继承的时候,父类的成员变量是以何种形式存在于子类的对象中的。

首先来看测试程序:

这段程序也比较好理解,首先我创建了一个A类,在A类里面有private,protected, public的成员变量int i,k,l。

然后测试程序用B类继承了A类,并且在B类的构造函数里面初始化了A类的成员变量,那么在A类的参数初始化表我对private,protected, public的变量赋予了不同的数值,应该分别是i(2),k(3),l(4),以便后期进行查验。

在B类自身的构造函数里面,将成员变量j初始化成了(1)。

好了,来到main函数里面的测试程序,我用一个int的指针指向对象的内存,并且用这个指针查看B类对象的内存内容,结果如下所示:

可以看到,是先输出了A类的成员变量,最后才是输出了B类的成员变量,那么也是可以从中看出子类的对象里面是会包含父类的private,protected, public的成员变量。

还可以看出父类的成员变量是排在子类的成员变量前面的,如下面这个结构图所示:

继承关系

那么我们来看子类对于private,protected, public的继承关系。

让我们来看看测试例程:

我在B类的构造函数里面进行了A类的成员变量的输出,结果如下所示:

可以看到正常输出了,现在取消注释:

可以看到编译器报错了,说明private在子类中是存在,但是不能访问的。

那让我们来看看,能否在B类的外面,也就是通过对象调用父类的protected和public的成员变量呢?测试看看:

可以看到,public可以正常输出,但是protected就会报错:

这说明,public的继承度最高,protected其次,private最低。

以上是关于[c++07]成员变量在继承中的约束的主要内容,如果未能解决你的问题,请参考以下文章

07.28 关键字 继承 重写 知识点梳理

面向对象语言成员变量方法可见性在继承中的变化

c++,继承

对象成员变量还是继承?

C++学习20 虚基类详解

子类能不能继承父类的成员变量