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

2 篇文章 0 订阅

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

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值