第45课 继承中的访问级别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第45课 继承中的访问级别相关的知识,希望对你有一定的参考价值。
1. C++中3种不同的继承方式
(1)public继承:父类成员在子类中保持原有访问级别
(2)private继承:父类成员在子类中变为私有成员
(3)protected继承:父类中的公有成员变为保护成员,其它成员保持不变。
①继承成员的访问属性 = Max{继承方式, 父类成员访问属性},Max表示最严格
②C++中的默认继承方式为private
【编程实验】继承的访问级别深度实践
#include <iostream> 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; } }; //冒号:表示继承关系,public表示继承方式,Parent为父类 class Child_A : public Parent //public继承 { 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 //protected继承 { 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 //protected继承 { 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,protected继承自parent,所以来自父类的公有成员m_c //变成了protected属性,外界无法访问 //c.m_c = 100; //Child_C,private继承自parent,所以来自父类的成员m_c //变成了private属性,外界无法访问 a.set(1, 1, 1); //合法 //b.set(2, 2, 2); //继承方式为protected,来自父类的函数set无法被外界访问 //c.set(3, 3, 3); //继承方式为private,来自父类的函数set无法被外界访问 a.print(); b.print(); c.print(); return 0; }
2. 遗憾的事实
(1)一般而言,C++工程项目中只使用public继承
(2)C++的派生语言(如D、C#、Java)只支持一种继承方式(public继承)
(3)protected和private继承带来的复杂性远大于实用性
3. 小结
(1)C++中支持3种不同的继承方式
(2)继承方式直接影响父类成员在子类中的访问属性
(3)一般而言,工程中只使用public的继承方式
(4)C++的派生语言中只支持public继承方式
以上是关于第45课 继承中的访问级别的主要内容,如果未能解决你的问题,请参考以下文章