c CAboutDlg CDialog class public 啥意思 类前面带一个

c CAboutDlg CDialog class public 啥意思 类前面带一个

本文目录导航:

c++类前面带一个:啥意思 class CAboutDlg : public CDialog//啥意思? { public: CAboutDlg(); } 求解释

这说明这是一个承袭相关。

承袭机制是面向对象程序设计是代码复用的关键手腕,它准许程序员在坚持类原有个性基础下,启动裁减参与配置。

这样发生新的类,称为派生类,承袭表现了面向对象设计的档次结构,表现了由便捷到复杂的认知环节。

承的三种方式:

1)私有承袭——public:基类的私有变为派生类的私有,基类的包全变为派生类的包全,私有派生类无法访问。

2)私有承袭——private:基类的私有变为派生类的私有,基类的包全变为派生类的私有,基类的私有无法访问。

3)包全承袭——protect:基类的私有变为派生类的包全,基类的包全变为派生类的包全,基类的私有无法访问。

裁减资料

总结:

1、基类的私有成员在派生类中无法访问,假设类内成员不想在类外访问然而想在派生类中访问,可以把类内成员定义为包全,可以看出包全成员限定符是由于承袭才发生的。

2、public承袭是一个接口承袭,他听从is-a的准则,每个父类的可用成员对子类也可用,由于每个子类对象也都是一个父类对象。

3、protect/private承袭是一个事实承袭,基类的局部成员并非齐全成为子类接口的一局部,是has-a准则所以大少数状况下不会经常使用这两种承袭相关,在绝大少数状况下经常使用public承袭。

4、不论是哪种承袭方式,基类的私有和包全成员派生类都可以访问,基类的私有成员存在,然而在派生类中不能访问。

5、当不写承袭的关键字时,经常使用关键字classs时默以为私有承袭,struct默以为私有承袭。

C++中,类中所提供的成员函数可以间接访问私有成员吗??

可以.私有成员函数,是类的接口.用户就是经过这个接口来启动访问.假设它都无法以的话,那么那些私有成员,不是没的访问了吗.那定义那些还有什么用?!同时,类中还可以定义友元.友元函数或友员类,也可以访问到类的私有成员.

C++11 之 override

私有承袭蕴含两局部:一是 函数接口 (interface),二是 函数成功 (implementation).在Shape类中,三个成员函数,对应三种承袭方式:1.1 纯虚函数 (pure virtual) 纯虚函数,承袭的是基类中,成员函数的接口,且要在派生类中,重写成员函数的成功。

调用基类的Draw(),须加 类作用域操作符 ::1.2 个别虚函数 个别虚函数,会在基类中,定义一个缺省的成功 (default implementation),示意承袭的是基类成员函数接口和缺省成功,由派生类选用能否重写该函数。

实践中,准许个别虚函数同时承袭接口和缺省成功是风险的。

比如,ModelA和ModelB是Airplane的两种飞机类型,且二者的航行方式齐全相反。

面向对象设计中,两个类共享一个个性-Fly,则Fly可在基类中成功,并由两个派生类承袭之。

如今参与另一个飞机型号ModelC,其航行方式与ModelA,ModelB不同,假设不小心遗记在ModelC中重写Fly函数,则调用ModelC中的fly函数,就是调用Airplane::Fly,然而ModelC的航行方式和缺省的并不相反。

即前面所说的,个别虚函数同时承袭接口和缺省成功是风险的,最好是基类中成功缺省行为,但只要在派生类要求时才提供该缺省行为。

1.2.1 方法一 一种方法是纯虚函数+缺省成功,由于是纯虚函数,所以只要接口被承袭,其缺省的成功不会被承袭。

派生类要想经常使用该缺省的成功,必定显式的调用。

这样在派生类ModelC中,即使一不小心遗记重写Fly函数,也不会调用Airplane的缺省成功。

1.2.2 方法二 可以看到,上方疑问的关键就在于,一不小心在派生类ModelC中遗记重写fly函数,C++11中经常使用关键字override,可以防止这样的“一不小心”。

1.3 非虚函数 非虚成员函数没有virtual关键字,示意派生类岂但承袭了接口,而且承袭了一个强迫成功(mandatory implementation)。

既然承袭了一个强迫的成功,则在派生类中,毋庸从新定义(redefine) 承袭自基类的成员函数。

经常使用指针调用ObjectID函数,则都是调用的Shape::ObjectID()。

假设在派生类中从新定义了承袭自基类的成员函数ObjectID呢?此时,派生类中从新定义的成员函数会“暗藏”(hide)承袭自基类的成员函数。

这是由于非虚函数是“静态绑定”的,pB被申明的是Shape*类型的指针,则经过pB调用的非虚函数都是基类中的,即使pB指向的是派生类。

与“静态绑定”相对的是虚函数的“灵活绑定”,即无论pB被申明为Shape*还是Rectangle*类型,其调用的虚函数取决于pB实践指向的对象类型。

2 重写(override)在1.2.2中提到override关键字,可以防止派生类中遗记重写虚函数的失误。

上方以重写虚函数时,容易犯的四个失误为例,具体论述:在派生类中,重写(override)承袭自基类成员函数的成功(implementation)时,要满足如下条件:一虚:基类中,成员函数申明为虚构的(virtual)二容:基类和派生类中,成员函数的前往类型和意外规格(exception specification)必定兼容四同:基类和派生类中,成员函数名、形参类型、常量属性(constness)和援用限定符(reference qualifier)必定齐全相反如此多的限度条件,造成了虚函数重写如上述代码,极容易由于一个不小心而出错。

C++11中的override关键字,可以显式的在派生类中申明,哪些成员函数须要被重写,假设没被重写,则编译器会报错。

因此,即使不小心漏写了虚函数重写的某个厚道条件,也可经过编译器的报错,极速定位失误。

小结:1)私有承袭纯虚函数 => 承袭的是:接口(interface)个别虚函数 => 承袭的是:接口 + 缺省成功(default implementation)非虚成员函数 => 承袭的是:接口 + 强迫成功(mandatory implementation)2)不要从新定义一个承袭自基类的非虚函数(never redefine an inherited non-virtual function)3)在申明须要重写的函数后,加关键字override参考《Effective C++》3rd,item 34, item 36《Effective Modern C++》 item 12

你可能想看:
« 上一篇
下一篇 »

相关推荐

FreeBasic:强大免费开源的64位basic编译器及应用优势

2025年05月10日

82阅读

脊柱侧弯矫正方法大盘点:运动康复、支具矫正等多种方式

2025年05月09日

85阅读

如何在winForm标题栏去掉标题文字且任务栏图标正常显示

2025年05月09日

85阅读

十一黄金周促销广告词大全,国庆购物狂欢等你来

2025年05月09日

77阅读

关闭快速编辑模式及插入模式,设置控制台指定文字颜色举例

2025年05月09日

63阅读

黄金搭档低糖高钙饮品包装及成分功效全解析,适合人群要知晓

2025年05月09日

91阅读