C++——多态性 与 虚函数

多态性

多态性是面向对象程序设计的关键技术之一。若程序设计语言不支持多态性,不能称为面向对象的语言。利用多态性技术,可以调用同一个函数名的函数,实现完全不同的功能。

虚函数

虚函数是一个类的成员函数,定义格式如下:
virtual 返回类型函数名(参数表)

关键字virtual指明该成员函数为虚函数。virtual仅用于类定义中,如虚函数在类外定义,不可加virtual(但是类内部声明时要加virtual)。

当某一个类的一个类成员函数被定义为虚函数,则由该类派生出来的所有派生类中,该函数始终保持虚函数的特征。

最后一句话如何理解?

#include<iostream>
using namespace std;

class Base
{
public:
    virtual void show()
    {
        cout << "This is Base show" << endl;
    }
};

class D :public Base
{
public:
    void show()
    {
        cout << "This is D show" << endl;
    }
};

class C :public D
{
public:
    void show()
    {
        cout << "This is C show" << endl;
    }
};

void main()
{
    C c;
    D *pd = &c;
    pd->show();
}
View Code

倘若D的show不是虚函数,那么pd->show();访问的就是类D的show方法。但结果却是C的show方法,所以类D的show方法也是虚的。

在整个虚函数继承体系中,父类 子类的虚函数需要做到3同。函数名相同,函数返回值相同,函数参数相同(包括参数个数,参数类型)

当在派生类中重新定义虚函数(overriding a virtual function,亦译作重载或覆盖)时,不必加关键字virtual。但重新定义时不仅要同名,而且它的参数表和返回类型全部与基类中的虚函数一样,否则联编时出错。

同名覆盖(override):如未关键字virtual,则是普通的派生类中的新成员函数覆盖基类同名成员函数(当然参数表必须一样,否则是重载),可称为同名覆盖函数,它不能实现运行时的多态性。

实现多态

继承

虚函数

通过父类指针 或 引用

猜你喜欢

转载自www.cnblogs.com/kelamoyujuzhen/p/9508596.html