C++、C#中 abstract 与 virtual关键字的区别联系

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关键字来实现。

你可能感兴趣的:(C++,c,C#,Class)