欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

虚函数、纯虚函数在继承时的问题

程序员文章站 2022-05-14 13:25:54
...
#include <iostream>

using namespace std;

class A
{
public:
    A(){};
    ~A(){};

    virtual void f(){cout<<"A f()"<<endl;}
    virtual void g()=0;

    void h(){cout<<"A h()"<<endl;}
};

class B : public A
{
public:
    B(){};
    ~B(){};

    virtual void f(){cout<<"B f()"<<endl;}

    void g(){cout<<"B g()"<<endl;}

    void h(){cout<<"B h()"<<endl;}

};

class C : public A
{
public:
    C(){};
    ~C(){};

    virtual void f(){cout<<"C f()"<<endl;}

    void g(){cout<<"C g()"<<endl;}

    void h(){cout<<"C h()"<<endl;}

};

int main()
{
    // A a;
    B b;
    // b.h();
    // b.f();
    // b.g();


    C c;
    A *pt = &b;
    pt->f();
    pt = &c;
    pt->f();


    return 0;
}
  1. 当父类中有纯虚函数时,子类如果不用实例化,则可以不实现纯虚函数;如果子类需要实例化,就必须实现纯虚函数(有纯虚函数的类不能被实例化,子类继承了有纯虚函数的父类,则子类也就有了纯虚函数,如果此时,不实现子类的纯虚函数,也就不能实例化了)。
  2. 父类中的虚函数和普通函数在子类中可以实现也可以不实现,虚函数的作用主要是实现多态。
  3. 多个有继承关系的类对象的地址赋值给父类对象指针(即多态),父类指针调用父类中的虚函数时,如果子类实现了此虚函数,则调用子类实现的虚函数,否则将调用父类的虚函数。