虚函数、纯虚函数在继承时的问题
程序员文章站
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;
}
- 当父类中有纯虚函数时,子类如果不用实例化,则可以不实现纯虚函数;如果子类需要实例化,就必须实现纯虚函数(有纯虚函数的类不能被实例化,子类继承了有纯虚函数的父类,则子类也就有了纯虚函数,如果此时,不实现子类的纯虚函数,也就不能实例化了)。
- 父类中的虚函数和普通函数在子类中可以实现也可以不实现,虚函数的作用主要是实现多态。
- 多个有继承关系的类对象的地址赋值给父类对象指针(即多态),父类指针调用父类中的虚函数时,如果子类实现了此虚函数,则调用子类实现的虚函数,否则将调用父类的虚函数。
上一篇: c++学习笔记 构造函数的继承,多继承,虚基类,虚继承
下一篇: 网站性能优化