1、静态关联和动态关联:函数重载和通过类对象调用的虚函数在编译时就可以确定其属于哪一类的,其过程属于静态关联。函数重载属于静态关联。
但是多态性是是通过基类指针与虚函数结合,先定义一个指向基类的指针变量,再指向相应的类对象,再通过基类指针去调用虚函数,此时不能确定调用哪一个类对象的虚函数,要在运行阶段才能确定,这就是动态关联。
2、声明虚函数只能在类的成员函数中,因为虚函数的作用是允许派生类中对虚函数重新定义。如果该类要作为基类,并且后面这个成员函数会在派生类中被重新定义的话,则将此成员函数定义为虚函数。在用new建立了临时对象,若基类中有析构函数,并且定义了一个指向该基类的指针变量,在程序中用带指针参数的delete运算符撤销对象时,会只执行基类的析构函数,而不执行派生类的析构函数。如果希望执行派生类的析构函数,则将基类的析构函数声明名为虚析构函数。
3、如果将基类的析构函数声明为虚函数,则有该基类所派生出的所有析构函数均自动成为虚函数。(即使派生类的析构函数与基类的析构函数名字不相同)在程序中最好将积累的析构函数声明为虚函数。
4、构造函数不能声明为虚函数,因为在执行构造函数时,类对象还未完成建立过程,当然谈不上函数与,类对象的关联。
5、纯虚函数,是在定义虚函数式被“初始化”为0的函数,例 virtual int area() const=0;
注意:纯虚函数没有函数体,最后的等于0并不是返回值,而是告诉编译系统此函数为纯虚函数,这是一个声明语句,最后又分号。
纯虚函数不能被调用,因为只有函数名字而不具备函数功能,只是告诉编译系统在派生类中对此函数提供定义。在派生类中对其定以后则可以对其进行调用。但是在派生类中如果不对其进行定义的话,该虚函数在派生类中仍然为纯虚函数。
6、抽象类:不用来生成对象,只用来作为基类去建立派生类。凡是包含纯虚函数的类都是抽象类,因为纯虚函数是不能被调用的,如果在派生类中没有对所有的纯虚函数进行定义,则仍然是抽象类,不能对其实例化。