如题
什么时候需要用到virtual和pure virtual
怎么用
用的时候应该注意什么
pure virtual是抽象方法的意思,如果基类没有办法实现,那么就写一个抽象的方法,将基类定义成抽象类,派生类如果是非抽象类必须实现。
virtual是一般的可以重写的方法,派生类如果不重写,那么就调用基类的,重写了,就覆盖了基类的。
之所以要virtual,主要是解决菱形继承关系的问题,比如A定义的方法m,B C都继承了A,各自重写了m,D同时继承B C,如果没有virtual,它就会有两个m方法(BC各一个),两个方法的参数、函数名、返回值一样,这就造成冲突了。
virtual和pure virtual具体代码:
abstract class A
{
public:
virtual void foo1() { cout << "A.foo1()" << endl; }
virtual void foo2() = 0;
};
class B : public A
{
virtual void foo1() { cout << "B.foo1()" << endl; }
virtual void foo2() { cout << "B.foo2()" << endl; }
};
定义virtual多用于子类重载,重新定义父类的方法,特殊化,pure virtual用于抽象类,一般用于定义接口,可实现可不实现,抽象类不能实例化对象。