设为首页 加入收藏

TOP

C++学习笔记之继承(二)
2015-07-20 17:53:34 来源: 作者: 【 】 浏览:5
Tags:学习 笔记 继承
如下:
?
首先创建基类对象
派生类构造函数通过成员初始化列表将基类的信息传递给基类构造函数
派生类构造函数应初始化派生类新增的数据成员。
二、使用派生类
?
复制代码
?1 #include
?2 #include "tabten.h"
?3?
?4 int main ()
?5 {
?6 ? ? using std::cout;
?7 ? ? using std::endl;
?8 ? ? TableTennisPlayer player1("Tara", "Boomdea", false);
?9 ? ? RatedPlayer rplayer1(1300, "Mallory", "Duck", true);
10 ? ? rplayer1.Name();//派生类调用基类的方法
11 ? ? cout << ( rplayer1.HasTable() ? (": has a table\n") : ("hasn't a table\n") );
12 ? ? player1.Name();
13 ? ? cout << ( rplayer1.HasTable() ? (": has a table\n") : ("hasn't a table\n") );
14 ? ? cout << "Name: ";
15 ? ? rplayer1.Name();
16 ? ? cout << "; Rating: " << rplayer1.Rating() << endl;
17?
18 ? ? //用基类对象初始化派生类
19 ? ? RatedPlayer rplayer2(1212, player1);
20 ? ? cout << "Name: ";
21 ? ? rplayer2.Name();
22 ? ? cout << "; Rating: " << rplayer2.Rating() << endl;
23?
24 ? ? return 0;
25 }
复制代码
?运行结果:
?
?
?
三、protected数据的继承
?
当基类中的成员数据为protected时,派生类就可以直接访问,而不用通过基类的公共方法去访问这些protected数据,简单来说,派生类可以直接继承protected数据成员,可以免去调用成员函数的开销,
?
使程序的性能稍稍有所提高。
?
在一个类的声明中,一个良好的类声明顺序最好是先声明public,然后是protected成员,最后是private成员。
?
使用protected数据注意的事项?
?
派生类对象不必使用成员函数设置基类的protected数据成员值,派生类很容易将无效的值赋给基类的protected数据,导致对象处于不可靠的状态中
使用protected数据成员,导致派生类成员函数实现可能太依赖基类的实现,实际上,派生类应该只依赖基类提供的服务(即非private成员函数),而不应该依赖基类的实现
多数情况下,使用private数据成员是更好的软件工程的方法,虽然protected数据的继承使程序的性能稍稍有所提高,但是代码优化就交给编译器去做好了,这样的话代码更易于维护、修改和调试,一句话,除非万不得已,尽量不使用protected数据的继承。
?
“程序员应该致力于编写符合软件工程原则的代码,而将优化的问题留给编译器去做”。一条好的准则是:“不要怀疑编译器”。
?
四、补充
?
派生类不会继承基类的构造函数、析构函数和重载的赋值运算符,但是派生类可以调用基类的构造函数、析构函数和重载的赋值运算符函数。
?
当由基类派生出一个类时,继承基类的方式三种,即public继承、protected继承和private继承。但实际情况是,一般很难采用private继承和protected继承,而且使用时需十分小心。
?
当从public基类派生一个类时,基类的public成员成为派生类中的public成员,基类的protected成员成为派生类中的protected成员。派生类永远不能直接访问基类的private成员,但是可以通过调用基类的public和protected成员函数进行访问
当从protected基类派生一个类时,基类的public和protected成员都变成派生类中的protected成员
当从private基类派生一个类时,基类的public和protected成员都变成派生类中的private成员
private和protected继承不是“is-a”关系
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇ZOJ3156_Taxi(二分图/二分构图) 下一篇Codeforces Round #261 (Div. 2) ..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: