C++:
C++中,由virtual实现多态。除多态外,virtual有两个特殊用法:
1、虚基类(Virtual base class)
为解决多重继承时的二义性提出来的。使用方法:
class B :virtual public A
class C :virtual public A
class D: public B, public C
Abstract class
2、纯虚函数
含有纯虚函数的类叫做抽象类。纯虚函数如下:
void virtual foo() = 0;
注意:与C#不同,在C++中,abstract不是一个关键字。
C#:
abstract可以修饰类和方法。
virtual在C#中用于修饰方法和属性。
abstract修饰的类叫做抽象类,其方法也必须修饰为抽象方法,且抽象类不能实例化,abstract修饰的方法不能实现。
如,
public abstract Light {
public abstract void turnon();
public abstract void turnoff();
};
在派生类中一定要有抽象方法的具体实现。
注意:抽象方法只能在抽象类中。
virtual 修饰的方法可以在一般类中。
其修饰的方法在父类中一定要有实现,即使只是一对大括号。
public Light {
public virtual void turnon() {};
};
抽象方法和virtual方法在派生类中的重载都是使用关键字override.
下面是转的内容:
一、Virtual方法(虚方法)
virtual 关键字用于在基类中修饰方法。virtual的使用会有两种情况:
情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法。那么在对派生类实例的调用中,该虚方法使用的是基类定义的方法。
情况2:在基类中定义了virtual方法,然后在派生类中使用override重写该方法。那么在对派生类实例的调用中,该虚方法使用的是派生重写的方法。
二、Abstract方法(抽象方法)
abstract关键字只能用在抽象类中修饰方法,并且没有具体的实现。抽象方法的实现必须在派生类中使用override关键字来实现。