1 虚函数
关于虚函数的重要概念:
- 定义为虚函数,不代表它不被实现,定义为纯虚函数,才代表它没有被实现
- 定义为虚函数是为了允许用基类的指针来调用子类的这个函数
- 定义纯虚函数是为了实现一个接口,继承这个类时必须要实现这个函数
1.1 举例
以下代码验证了上面的第二点:
class A
{
public:
virtual void foo() {cout<<"A::foo() is called"<<endl; }
};
class B:public A{public:
void foo(){cout<<"B::foo() is called"<<endl;}
};
int main(void)
{
A *a = new B();
a->foo();
// 在这里,a虽然是指向A的指针,但是被调用的函数(foo)却是B的!
return 0;
}
2 纯虚函数
纯虚函数是在基类中声明的虚函数,并且在基类中没有定义,但是要求任何派生类都要定义自己的实现方法;在基类中实现虚函数的方法是在虚函数原型后面加=0
;
virtual void function_1()=0;
含有纯虚函数的类称为抽象类,一般也是作为基类使用,它不能实例化,如果派生类里实现了这个函数,才能实例化这个派生类的实例,如果派生类里也没有实现那么也不能实例化;