我的代码如下:
#include "stdafx.h"
#include <iostream>
using std::cout;
class Base{
public:
virtual void iam(){ cout << "Base\n"; }
virtual ~Base(){};
};
class deriveA:public Base{
public:
void iam() override { cout << "DeriveA\n"; }
};
class deriveB :public Base{
public:
void iam() override { cout << "DeriveB\n"; }
};
void print(Base * bp)
{
bp->iam();
}
int _tmain(int argc, _TCHAR* argv[])
{
deriveA a;
deriveB b;
a.iam();
b.iam();
deriveA *ap = &a;
deriveB *bp = &b;
print(ap);
print(bp);
return 0;
}
由于在虚基类中没有数据成员,因此不需要构造函数,但是需要定义虚析构函数,确保有数据成员的派生类被正常清理。
override保留字只是作为强调说明,并不是C++关键字,没有强制意味。
派生类指针可以直接传给基类指针变量,并且可以完美确定类方法的调用。