时间:2021-05-20
继承是OOP设计中的重要概念。在C++语言中,派生类继承基类有三种继承方式:私有继承(private)、保护继承(protected)和公有继承(public)。
继承是C++中的重要特性,派生类可以访问基类中的protected和public成员
先上代码:
酱在这里用一段简单地代码为大家说明了继承的规则。派生类只能访问基类的public和protected成员,无法访问private成员;若要调用类中private成员,要在类内部使用this指针传参(关于this指针的用法,酱在后续文章中会为大家进一步整理)。这里Derive是public Base,是公有继承。
上表:
首先要确立一个概念:无论是公有、私有还是保护继承,说到底它们都属于继承,满足继承的基本规则(如上表)。无论是private、protected还是public,对于直接向基类继承的派生类来说几乎没有影响(即俗称的“子代”而非“孙子代”)。上面的代码class Derive:public Base换成private Base和protected Base,结果都是一样的。
影响的是派生类的继承,即“孙子代”。
1.保护继承
先上代码:
#include<iostream>using namespace std;class Base{ private: void func_pri(); protected: void func_pro(); public: void func_pub();};void Base::func_pri(){ cout << "private" << endl;}void Base::func_pro(){ cout << "protected" << endl;}void Base::func_pub(){ cout << "public" << endl; this->func_pri();}class Derive:protected Base{ public: void function();};void Derive::function(){ func_pro(); func_pub();}class Derive_sec:public Derive{ public: void func_sec();};void Derive_sec::func_sec(){ func_pub(); func_pro(); //func_pri();调用这里时会产生错误}int main(){ Derive_sec* derive; derive=new Derive_sec; derive->func_sec(); delete derive; return 0;}这段代码运行后的结果是public protected。
可以看出的是Derive_sec类(子二代)可以调用的是Base基类的protected和public成员函数,而无法调用private成员函数。
2.私有继承
先上代码:
#include<iostream>using namespace std;class Base{ private: void func_pri(); protected: void func_pro(); public: void func_pub();};void Base::func_pri(){ cout << "private" << endl;}void Base::func_pro(){ cout << "protected" << endl;}void Base::func_pub(){ cout << "public" << endl; this->func_pri();}class Derive:private Base{ public: void function();};void Derive::function(){ func_pro(); func_pub();}class Derive_sec:public Derive{ public: void func_sec();};void Derive_sec::func_sec(){ //func_pub();调用时会产生错误 //func_pro();调用时会产生错误 //func_pri();调用这里时会产生错误 function();}int main(){ Derive_sec* derive; derive=new Derive_sec; derive->func_sec(); delete derive; return 0;}通过结果来看,Derive_sec类(子二代)对Base基类中private、protected和public的成员函数均不能调用,但其仍然可以调用子一代的公有函数。
在三种模式的继承中,我们可以看出当子一代设置为公有继承/保护继承基类时,子二代对基类protected、public成员变量可以访问,而对private变量不可访问;当子一代设置为私有继承基类时,子二代对基类private、protected、public成员变量均不能访问.
我们可以得出这样的结论:当基类和派生类具有直接继承关系时,按照上文所述继承规则即可;若派生类是经过对基类的多重继承得来的,则要考虑之前的继承模式。
private继承模式在对类之间的封装性有要求时,可以考虑使用。
到此这篇关于C++中的继承模式深入详解的文章就介绍到这了,更多相关C++中的继承模式内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
C++类中的继承实例详解实例效果:实现代码:#include#includeusingnamespacestd;classPerson{public:Perso
php和java,c++一样都是单继承模式。但是像python,是支持多继承(即Mixin模式)。那么如何在php中实现多继承模式?这就需要使用trait。tr
C++类继承之子类调用父类的构造函数的实例详解父类HttpUtil:#pragmaonce#include#includeusingnamespacestd;c
本文较为深入的探讨了C++继承中的访问控制,对深入掌握C++面向对象程序设计是非常必要的。具体内容如下:通常来说,我们认为一个类有两种不同的用户:普通用户和类的
C/C++公有继承、保护继承和私有继承的区别在c++的继承控制中,有三种不同的控制权限,分别是public、protected和private。定义派生类时,若