一、三种继承方式
继承方式不同,第一个不同是的是派生类继承基类后,各成员属性发生变化。第二个不同是派生类的对象能访问基类中哪些成员发生变化。表格中红色标注。
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的。
时间: 2024-10-11 05:15:27