这篇文章主要介绍了c++中的继承模式有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言继承是OOP设计中的重要概念。在C++语言中,派生类继承基类有三种继承方式:私有继
这篇文章主要介绍了c++中的继承模式有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
继承是OOP设计中的重要概念。在C++语言中,派生类继承基类有三种继承方式:私有继承(private)、保护继承(protected)和公有继承(public)。
继承是C++中的重要特性,派生类可以访问基类中的protected和public成员
先上代码:
#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:public Base{public:void function();};void Derive::function(){//func_pri();调用private成员会产生编译错误func_pro();func_pub();}int main(){Derive* derive;derive=new Derive;derive->function();//output://protected public privatedelete derive;return 0;}
酱在这里用一段简单地代码为大家说明了继承的规则。派生类只能访问基类的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++中的继承模式有哪些”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网其他教程频道,更多相关知识等着你来学习!
--结束END--
本文标题: C++中的继承模式有哪些
本文链接: https://www.lsjlt.com/news/268904.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0