虚函数与多态性
1.虚函数:
在类中被声明为virtual的成员函数,是重载的另一种形式。
2.
(1声明为指向基类对象的指针可以指向公有派生类的对象,不允许指向它的私有派生类的对象,也不允许指向保护派生类对象。
(2 不允许将一个声明为指向派生类对象的指针指向基类的对象
(3 声明为指向基类对象的指针,指向公有派生类的对象,只能访问派生类从基类继承下来的成员,不能直接访问公有派生类中定义的成员。
3. 虚函数的定义在基类中进行。
可以在派生类中重新被定义,要求函数原型(返回类型,函数名,参数个数,类型,顺序)要一致。
4. 虚函数与重载函数的区别:
函数重载要求函数的参数或类型必须有不同,函数返回类型可以不同,可以相同。
虚函数要求函数原型(返回类型,函数名,参数个数,类型,顺序)要一致。
5.虚函数的限制:
(1 虚函数的声明只能出现在类声明的函数原型的声明中,不能出现函数体实现中,基类中只有保护成员或公有成员才能被声明为虚函数。
(2 动态联编只能通过成员函数来调用或通过指针,引用访问虚函数,如果用对象名来访问虚函数,采用静态联编。
(3 虚函数不能是友元函数或静态成员函数,但可以在另一个类中被声明为友元函数。
(4 构造函数不能被声明为虚函数,析构函数可以。
(5 内联函数不能被声明为虚函数。
6.纯虚函数:
在一个基类中说明的虚函数,在该基类中没有具体的操作内容,要求各派生类在重新定义时根据自己的需要定义实际的操作内容。
7.当类声明中包含纯虚函数时,不能创建该类的对象。纯虚函数的类只作为基类。
基类中纯虚函数只有函数名不具备函数的功能,不能被调用。
8.抽象类就是带有纯虚函数的类。抽象类的作用就是作为一个类族的共同基类,或者为一个类族提供一个公共接口。
9.
(1 抽象类不能作为参数类型,函数返回型,显示转换类型
(2 可以声明抽象类的指针,引用,通过它们,可以指向,访问派生类对象,从而访问派生类的成员。