标签:
一、三种继承方式
继承方式不同,第一个不同是的是派生类继承基类后,各成员属性发生变化。第二个不同是派生类的对象能访问基类中哪些成员发生变化。表格中红色标注。
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的。
标签:
原文地址:http://www.cnblogs.com/hslzju/p/5495162.html