面向对象的多态特性
虚函数:在类的成员函数前加virtual即构成虚函数。作用是通过基类的指针与引用调用派生类的成员函数
多态即多种形态,通过调用不同的函数实现不同的功能。
多态的条件
(1)虚函数的重写(子类定义一个与父类的完全相同的虚函数)
(2)父类的指针或引用
当使用父类的指针或引用调用这个重写的虚函数时,指针指向父类就调用父类的虚函数,指向子类就调用子类的虚函数。
注意:
(1)基类(父类)必须为虚函数,派生类(子类)保持这一特性。(相当于父类必须为虚函数,子类可为虚函数也可不为虚函数)
(2)除协变外,派生类(子类)的重写必须保持函数名、参数、返回值与基类(父类)保持相同。
(3)协变就是派生类的中函数的返回值可以与基类的不同,但返回值必须是指向父子关系的指针或引用。
(4)静态成员函数不能为虚函数。因为静态成员函数就相当于是受命名空间限制的普通成员函数,可以把它看做是一个类。它与类的实例无关,在调用时不会调用隐含的this指针,因此不能为虚函数。简言之,成员函数实例相关,静态函数类相关,虚函数相当于成员函数,所以静态函数不能为虚函数。
(5)在类外定义虚函数,只能在声明时加virtual,不能在类外定义时加virtual。
(6)构造函数、拷贝构造函数、赋值运算符重载不能是虚函数。
原因:虚函数的作用是通过父类的指针或引用调用子类的相关函数,而构造函数在创建对象时是自己调用的,没有通过子类的指针或引用调用,所以构造函数不可能是虚函数。拷贝构造同理。
(7)析构函数要定义成虚函数---保证正确调用对应的函数

浙公网安备 33010602011771号