#include<iostream>
using namespace std;
class A
{
public:
void foo()
{
printf("1\n");
}
virtual void fun()
{
printf("2\n");
}
};
class B : public A
{
public:
void foo()
{
printf("3\n");
}
void fun()
{
printf("4\n");
}
};
int main(void)
{
A a;
B b;
A *p = &a;
p->foo();
p->fun();
p = &b;
p->foo();
p->fun();
return 0;
}
多态的实现方法: 通过 基类 创建的 指针 指向 派生类 的 对象,值得注意的是该指针只能调用基类的函数,如果将基类的函数定义成虚函数,那么可以调用派生类的函数,但是也只能调用派生类重写的函数,当然依旧可以调用 基类中未被重写的函数。(父类引用指向子类对象)
注意: 在基类定义的纯虚函数之后,该基类就是抽象类,如果没有在派生类中重写纯虚函数,那么该派生类也是抽象类,故不能创建对象。所以基本上都要派生类中重写基类的纯虚函数。