Visual C++开发指南 高守传等
前面是C++部分总结,忍不住复习了一遍。
多态:同一消息被不同对象接收,导致不同的行为。函数重载实现了这种多态性,建立在虚函数的概念和机制上。
编译时的多态性:函数重载和运算符重载
运行时的多态性:程序执行过程中,根据执行的具体情况动态地确定,通过类继承关系和虚函数实现(基类的指针指向哪一个子类的对象)。
虚函数:如果未加virtual,则是普通的派生类中的新成员函数覆盖基类同名成员函数(当然参数也必须一样,否则是重载),称为同名覆盖函数,而不是多态。
静态联编:使用“.”运算符调用虚函数,被调用的虚函数是在编译时确定的;
动态联编:基类指针或引用指向派生类对象,并使用指针调用虚函数,使用“->”运算符。
面向过程,所以程序都使用静态联编。
有虚函数的类中,编译时创建虚函数表,有一个指向虚函数表的指针,该指针在构造函数中秘密插入代码完成初始化,因此构造函数不能是虚函数。
类的派生过程:
类的静态数据成员:要在类的定义中声明,静态数据成员的初始化要在类外的全局范围内进行,而不能在类的构造函数中进行(因为它不属于对象,而属于类,存储在一处,供所有对象使用)。
静态成员函数:只使用静态数据成员的成员函数(因为静态成员函数没有this指针,所以访问不到某个具体对象的数据)。
const关键词:
const数据成语的声明必须包含初值,初值必须是常量表达式,const常量的值在作用域内保持不变,在编译期间就已初始化。。。
const 不能修饰静态成员函数,因为const修饰函数时,实际修饰的是this指针。
inline内联函数:
程序编译时,编译器对内联函数在调用出进行替换(展开)。
友元函数,类外的函数想要访问类的private成员时,将外部函数声明为类的友元函数,类的友元函数不属于类。
运算符重载:
C++中预定义的运算符只用于基本数据类型,对于自定义的数据类型(类)需要运算符重载
模板:
函数模板:
类模板:
模板函数由编译系统隐式生成,实质是函数重载。