1回顶部 作者:雷神
转载请联系作者
第十七天:
当一个类包含其他类时用合成。
当一个类是另一个类的扩展,它包含另一个类的一些属性,另外又增加了一些属性行为用继承。
一个由其他对象合成的对象在它的所有成员对象初始化之前不能被初始化。
构造合成类本身之前应该首先用构造函数初始化表构造成员类。
提供构造整个合成类所需的所有参数,包括构造类中的每个成员类的所需参数。
不需调用成员类的析构函数。
不能访问成员类的私有数据。要想访问它们必须通过调用公有成员函数。
当一个类和另一个类只有个别成员函数或数据成员不同时使用继承的方法。当一个类包含另一个或更多的类时使用合成。但合成类并不仅仅是其他类的功能扩展版本。对于继承构造函数初始化表在建立对象时扮演了重要的角色,当构造一个合成类对象时,则必须肯定所有成员元件都已被构造了。
如果合成类或某个成员元件类包含指针成员,就必须编写重载赋值函数。2回顶部
第十八天:
在大多数程序中不使用虚函数,就使用静态联编。除非使用了函数指针或是虚函数,否则C/VC++编译器都采用静态联编方式。
静态联编是指在编译时而非运行时确定函数调用。此方法效率高。
动态联编是指在运行时才能确定函数调用。OOP中需要进行动态联编的场合是使用一个指向类家族所有类的指针。只要这个指针指向基类,就能指向任何一个派生类,编译器无法确定指针究竟指向哪个类,直到运行时才能确定。加入Virtual关键字是为了告诉编译器等到运行时在确定哪个函数被调用。基类的还是派生类的函数。
使用Virtual要求动态联编时,VC++在函数调用处插入一个间接指针,不是指向函数首址,而是指向虚拟函数调用地址表(指向函数首址是直接指针)这个表叫做VTABLE(Virtual Table 虚拟表)。在运行时,对象指针触发成员函数在虚拟表中的偏移量调用正确的函数。
纯虚函数不包括任何代码,可以选择给纯虚函数赋0值,从而使编译器不能让用户试图实例化一个包含纯虚函数的基类。
任何包含一个或多个纯虚函数的基类称做抽象基类。不能实例化,成员函数是空的,但可以用它作为它的派生类层次的模式,这样一个基类提供一个所有类家族中类的框架。抽象基类可以列出所有公用数据成员和成员函数,以便派生类继承。
//Filename: 1206.CPP
#include |
鏀惰棌鎴愬姛鏌ョ湅鏀惰棌>>
正在阅读:『21天精通C++』第三周学习笔记(3-2)『21天精通C++』第三周学习笔记(3-2)
2004-02-14 09:34
出处:PConline
责任编辑:zwg