一、封装、继承,这些就不多说了。
二、this指针
非static成员函数都会被添加这个参数。
三、虚函数与多态
实现对象操作的一般化,一条指令实现不同的操作。
not-virtual 函数,在编译时期就转换成一个固定地址的调用了,称为前期绑定或者静态绑定。
virtual函数,必须在执行期才能判断之,称为后期绑定或动态绑定。
函数声明的时候加上virtual,即为虚函数,编译器会为类加上一项成员变量,指向虚函数表的指针。虚函数表记录了所有虚函数的真实地址。
派生类继承基类的虚函数表,当改写虚函数时,虚函数表就受到了影响,表中元素所指的函数地址将不再是基类的函数地址,而是派生类的函数地址。
如果通过基类指针指向派生类,调用的虚函数还是派生类所定义的;但是如果把派生类对象(不是指针)强制转换成基类,那么编译器会进行拷贝构造,从而使派生类的虚函数表变成基类的内容了,那么此时调用的虚函数就会成为基类所定义的了。
四、静态成员
声明的时候加上static,为类所有,不属于某个对象,如果是成员函数,那么不再有this指针,没有this指针,正是call back函数所需要的。
五、运行时类型识别(RTTI)
六、动态创建
七、异常处理
八、Template
template
T power(T base, int exponent)
{
return ;
}
template
class CThree
{
public:
private:
}
使用:CThree obj(2);
编译器遇到template时,不能够立即生成机器代码,知道template被指定某种类型。这意味着template的完整定义将出现在被使用的每一个角落。如果在不同文件中,有相同的定义,就出现重复了,所以在链接的时候删除重复的定义代码。
阅读(890) | 评论(1) | 转发(0) |