冒号(:)表示继承关系,Parent表示被继承的类,public的意义是什么?
class Parent { }; class Child : public Parent { };2、有趣的问题
是否可以将继承语句中的public换成proteced或private?如果可以,与``public`继承有什么区别?
//45-1.cpp #include3、C++中支持三种不同的继承方式#include using namespace std; class Parent { }; class Child_A : public Parent { }; class Child_B : protected Parent { }; class Child_C : private Parent { }; int main() { return 0; }
- public继承
- 父类成员在子类中保持原有访问级别
- private继承
- 父类成员在子类中变为私有成员
- protected继承
- 父类中的公有成员变为保护成员,其他成员保持不变
继承成员的访问属性 = Max{继承方式,父类成员访问属性}
C++中的默认继承方式为private!
//45-2.cpp #include4、遗憾的事实#include using namespace std; class Parent { protected: int m_a; protected: int m_b; public: int m_c; void set(int a, int b, int c) { m_a = a; m_b = b; m_c = c; } }; class Child_A : public Parent { public: void print() { cout << "m_a = " << m_a << endl; cout << "m_b = " << m_b << endl; cout << "m_c = " << m_c << endl; } }; class Child_B : protected Parent { public: void print() { cout << "m_a = " << m_a << endl; cout << "m_b = " << m_b << endl; cout << "m_c = " << m_c << endl; } }; class Child_C : private Parent { public: void print() { cout << "m_a = " << m_a << endl; cout << "m_b = " << m_b << endl; cout << "m_c = " << m_c << endl; } }; int main() { Child_A a; Child_B b; Child_C c; a.m_c = 100; //b.m_c = 100; //Child_B 保护继承自Parent,所以所有的public成员变为protected成员 //c.m_c = 100; //Child_B 保护继承自Parent,所以所有成员变为private成员 a.set(1, 1, 1); //b.set(2, 2, 2); //c.set(3, 3, 3); a.print(); b.print(); c.print(); return 0; }
- 一般而言,C++工程项目中只使用public继承
- C++的派生语言只支持一种继承方式(public继承)
- protected和private继承带来的复杂性远大于实用性
.d
.cs
.java
6、小结- C++中支持3种不同的继承方式
- 继承方式直接影响父类成员在子类中的访问属性
- 一般而言,工程中只使用public的继承方式
- C++的派生语言中只支持public继承方式
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)