c++与c#中概念的不同理解

虚基类

多态继承中,当派生类的部分或全部直接基类又是从另一个共同基类派生而来时这些直接基类中从上一级共同基类继承来的成员就拥有相同的名称。在派生类的对象中,同名数据成员在内存时期拥有多个拷贝,同一个成员函数会有多个映射,出现二义性,这个二义性为间接二义性。

解决的方法是:将共同基类设置为虚基类。

这时从不同的路径继承过来的同名数据成员在内存中就只有一个拷贝,同一个函数名也就只有一个映射。

虚基类的定义如下

Class派生类名: virtual继承方式 基类名

多继承情况下,虚基类关键字的作用范围和继承方式关键字相同,只对紧跟其后的基类起作用。

 

如下给一个实例

 

 

使用虚基类定义

 Class Car :virtual public Automobile //小客车类

Class Wagon : virtual public Automobile //小货车类

这时候,从Automobile中不同途径继承来的power,show() 在SationWago中就只有一个拷贝了

而在C#中,是不允许这样的多继承的,但是允许多接口的实现

 

++++++++++++++++++++++++++++++++++++++++++

虚函数

 是C++语言引入的一个很重要的特性,它提供了“动态绑定”机制,正是这一机制使得继承的语义变得相对明晰。对继承体系的使用者而言,此继承体系内部的多样性是“透明的”。它不必关心其继承细节,处理的就是一组对它而言整体行为一致的“对象

特点

  基类抽象了通用的数据及操作,就数据而言,如果该数据成员在各派生类中都需要用到,那么就需要将其声明在基类中;就操作而言,如果该操作对各派生类都有意义,无论其语义是否会被修改或扩展,那么就需要将其声明在基类中。

定义方式

Virtual函数类型 函数(形参表)

{

函数体;

}

联编也可以在运行时进行,成为动态联编。使用虚函数是实现动态联编的基础。要实现动态联编,需要满足三个条件

1 应满足类型兼容规则

2在基类中定义虚函数,并在派生类中重新定义虚函数。

3 要由成员函数或通过指针,引用访问虚函数。

 

注意:虚函数不能是静态成员函数,也不能是友元函数,因为静态成员函数和友元函数不属于某一个对象

 

纯虚函数  (抽象类中定义)

 是一个在基类中说明的虚函数, 它在该基类中没有定义具体实现,要求各派生类根据实际需要定义函数实现。纯虚函数的作用是为派生类提供一个一致的接口,实现多态的一种方式。

定义方法

Vitual  函数类型函数名(参数表)=0;

 

=========================

以上是c++中实现多动态的一些方法。而在c#中是如何实现呢

 

c#

(默认都是Object的派生类)

base关键字 ,来引用基类的构造函数的。

通过virtual关键字声明虚基类或(虚方法),也可定义抽象类和抽象方法,然后利用Override,派生类 来重写基类的方法。

开放扩展,关闭修改等原则

抽象类的特性

抽象类是不能实例化

抽象类可包含抽象方法和抽象访问器

不能由Sealed修饰符修改抽象类

抽象方法特性

抽象方法默认是隐士的虚方法

只允许在抽象类中使用抽象方法声明

 

多态   是利用重载和覆写的方式

详见下图

单击图片外链

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值