C++三种继承方式

一、三种继承方式

继承方式不同,第一个不同是的是派生类继承基类后,各成员属性发生变化。第二个不同是派生类的对象能访问基类中哪些成员发生变化。表格中红色标注。

 1 #include <iostream>
 2 using namespace std;
 3 
 4 class A
 5 {
 6 private:
 7     int i;
 8 protected:
 9     int j;
10 public:
11     int k;
12 };
13 
14 class B:public A
15 {
16 
17 };
18 
19 int main()
20 {
21     B b;
22     b.k=1;
23 }

1、只有当B,public继承A的时候,才能b.k=1。因为只有当public继承的时候,派生类的对象才能访问基类中的public成员。如果private、protected继承,基类中的k属性会变成private、protected,无法被派生类的对象访问。

2、当B,public继承A的时候,b.i=1和b.j=1是错误的,因为派生类的对象只能访问基类中的public成员。

 

二、存储空间

class B:private A

class B:protected A

class B:public A

都输出24。

 

三、《C++程序设计实习》摘录

这里,son f;f.nProtected=1;我在VS2012下测试通过,protected成员只是不能被其他函数访问。打个问号。

 

四、练习题

下面描述中,表达正确的有()

A公有继承是基类中的public成员在派生类中仍是public的

B公有继承是基类中的private成员在派生类中仍是private的

C公有继承是基类中的protected成员在派生类中仍是protected的

D私有继承是基类中的public成员在派生类中仍是private的

答案是ACD

B错误是因为基类中的private成员在派生类中是不可被访问的,所以也就谈不上是private的。

posted @ 2016-05-15 14:05  Pearl_zju  阅读(366)  评论(0编辑  收藏  举报