2009-09-21
来源:互联网 发布:阿里云算法大赛 编辑:程序博客网 时间:2024/05/17 09:45
1,公有继承意味着是一种的关系。Has a;
//哲学观点就是一般与个别,共性与个性的关系;
例如,如果函数参数接受一个被继承的类)(基类),那么继承类同样可以作为参数!,而倘若函数参数只接受继承类,那么传入基类将无法凑效。
2,有趣的企鹅是一种鸟,但企鹅不会飞的问题
定义一个bird类,继承得到会飞的鸟类和不会飞的鸟类,企鹅类继承不会飞的鸟类。bird类不声明虚拟飞函数,不会飞的鸟类和企鹅类也不声明飞函数。那么如果执行 企鹅.fly() 将产生编译错误。是一种好的解决方案。注:在编译期间侦测产生的错误比在运行期间产生的错误要高明的多^_^.
3,矩形和正方形
正方形是一种矩形,矩形可以改变宽高,那么正方形也可以改变宽高,但是正方形的宽高是相等的......?所以此时用公有继承描述他们关系是错误的!
4,什么叫协议类 protocal class
协议类没有任何实现代码;作用只是为派生类指定一个接口。所以它往往没有数据成员,也就没有构造函数,但是有一个虚拟析构函数。模样如下:
class Person{
public:
virtual ~ Person();
virtual string name() const = 0;
virtual string birthDate() const = 0;
virtual string address() const = 0;
virtual string nationality() const = 0;
};
5,protocal class 有一个扮演构造函数的函数称为 factory functiion 或者virtual constructor! 一般称为protocal class的static 函数
static Person* makeperson(const string &name,const Date&birthday,const Address &addr,const Country &country);
6,可以给纯虚拟函数提供定义。不过调用它们要指定其完整的类名称,即所谓的静态调用。
7,声明一个纯虚函数是为了让派生类只继承其接口。
8,声明一般的虚拟函数的目的是什么?
Ans:是为了让继承类继承该函数的接口和缺省行为。
意思是如果我不想再派生类中重写写一个这样的函数,那么我使用的将是基类提供的缺省行为。
9,声明非虚拟函数的目的是什么?
Ans:是为了让派生类继承函数的接口及其实现。静态绑定
10,条款37:为什么不要重新定义继承来的非虚拟函数?
如果重新定义,将出现难以理解的行为,决定因素不是在于指针所指之对象,而是指向该对象之指针当初的声明类型。
例如:
class B{
public:
void mf();
...
};
class D:public B{
publilc:
void mf();
...
};
D x;
B* pb = &x; //获得指针,指向x;
pb->mf(); // B::mf();
D* pd = &x; //获得指针,指向x;
pd->mf(); //D:mf();
11,为什么不要重新定义继承而来的缺省参数值呢;
因为缺省参数值和非虚拟函数一样是静态绑定;所以改写后呈现的不是期望的参数值。如果是虚拟函数,函数调用将表现出奇怪的组合。如果缺省参数值是动态绑定,那么编译器必须有每种办法,能够在执行期间为虚拟函数决定合适的缺省参数值,然后执行效率将受到影响。
- 2009-09-21
- 09年初的第一次思索(2009-2-21)
- 我在网易游戏的日子【2009-09-21】
- 09#21
- 一个高效的二进制数据补丁算法2009-07-19 21:09
- C++ map的基本操作和使用 (2009-09-23 14:58:21)
- 波密--比瑞士还瑞士地方 (写于2009-04-21 09:17)
- 安全心得(2009-09-09)
- 2009-01-09
- 2009-02-09
- 2009-01-09
- 2009-06-09
- 2009-07-09
- 2009-09-02
- 2009-09-01
- 2009-09-02
- 2009-09-03
- 2009-09-04
- 初学MySQL,应该注意的问题
- 开始工作到现在.......
- 修改网络连接的用户
- C#中HashTable的用法
- ubuntu8.04配置resin
- 2009-09-21
- 用J2SE 1.4进行Internet安全编制程序
- 相互支撑的力量
- 关于如何做网页的文章
- struts 2.0入门
- Instanceof关键字
- JavaScript的类型转换(字符转数字,数字转字符)
- sqlserver2005远程连接 mysql
- Ext ComboBox 宽度