c++与c#中概念的不同理解
来源:互联网 发布:彩票选号优化方法 编辑:程序博客网 时间:2024/05/17 08:11
虚基类
多态继承中,当派生类的部分或全部直接基类又是从另一个共同基类派生而来时这些直接基类中从上一级共同基类继承来的成员就拥有相同的名称。在派生类的对象中,同名数据成员在内存时期拥有多个拷贝,同一个成员函数会有多个映射,出现二义性,这个二义性为间接二义性。
解决的方法是:将共同基类设置为虚基类。
这时从不同的路径继承过来的同名数据成员在内存中就只有一个拷贝,同一个函数名也就只有一个映射。
虚基类的定义如下
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修饰符修改抽象类
抽象方法特性
抽象方法默认是隐士的虚方法
只允许在抽象类中使用抽象方法声明
多态 是利用重载和覆写的方式
详见下图
单击图片外链
- c++与c#中概念的不同理解
- C语言中对齐概念的理解
- 理解c中堆栈的概念
- C#与C/C++的不同
- C与C++中关于声明与定义概念理解
- 快速理解C#高级概念事件与委托的区别
- 理解C#中属性的概念和作用
- 我对C#中委托概念的理解
- 6: 理解C#中几个“等价”概念之间的关系
- C#与C/C++的不同
- 黑马程序员------C语言中指针的概念和理解
- IOS中简单的KVO概念理解与应用
- IOS中简单的KVC概念理解与应用
- C#中接口(interface)的理解--接口概念的理解
- C#中接口(interface)的理解--接口概念的理解
- C/C++中宏概念理解
- 数据库中概念的理解
- c中字符串与c++中字符串的不同
- spi.c
- cf 158div2 D. Black and White Tree
- Android 根文件系统启动过程(init进程 详细分析)
- linux-时间相关结构体和函数
- 萧山JS
- c++与c#中概念的不同理解
- WCF项目中客户端与服务器时间问题步无法连接的解决方案 (供自己以后参考)
- Java指点江山
- 自己搭建的hadoop集群的全过程记录
- C# Heap(ing) Vs Stack(ing) in .NET: Part I
- Android Scroller简单用法
- 2012年36个最佳前端开发指南
- Orange数据格式
- LCD设备驱动程序2