C++和C#中隐藏方法的区别
来源:互联网 发布:干部网络考试答案 编辑:程序博客网 时间:2024/05/21 08:00
本文首先介绍两种语言中隐藏方法的实现,然后对这两种方法所产生的结果进行解释。
C++中的隐藏方法:
1. 基类和派生类的函数名相同,参数列表不同,此时不论是否有virtual,基类方法被隐藏。
2. 基类和派生类的函数签名完全相同,但基类方法没有virtual关键字,此时基类方法被隐藏。
C#中的隐藏方法:
1. 基类和派生类的函数签名完全相同,此时除非同时有virtual和override关键字时产生方法覆盖,其他可以编译成功的情况皆为方法隐藏。
2. 在函数名相同,但参数列表不同的情况下,不会发生隐藏,此时即使使用new关键字,编译器也会告诉你new是无效的。这一点和C++是不一样的,也就是说,C#只有在签名完全相同的情况下才会发生隐藏和覆盖的情况。
C++中隐藏方法的结果:
使用基类指针指向派生类对象时,基类的同名方法被隐藏。
使用派生类对象直接调用方法时,基类的同名方法被隐藏。
这两种情况的意思是,只要调用的方法是派生类中没有的,就会报编译错误,如果派生类有且基类中也有,那么就会调用派生类的方法。
C#中隐藏方法的结果:
使用基类对象引用派生类实体时,基类的同名方法被隐藏。
总结:
1. C++只要函数名相同,就会发生方法隐藏,除非签名完全相同且使用virtual关键字,此时是覆盖,也叫多态。而C#只有在签名完全相同,且同时没有virtual和override时才会发生隐藏。
2. 两种语言发生覆盖的条件都是签名完全相同,且C++要有virtual关键字,而C#要有virtual和override关键字。
3. 重载是发生在同一个类中的,函数名相同,但签名不同的函数。根据调用方的实参类型,静态绑定函数入口的技术。
- C#中隐藏(new)和方法重载(overide)的区别
- C++和C#中隐藏方法的区别
- C#中“覆盖”和“隐藏”的区别
- c#中隐藏(new)和方法重写(override)和重写(overload)的区别
- C#中隐藏(new)和方法重写(override)和重载(overload)的区别
- C#和Java 方法重写和覆盖隐藏的区别
- c#隐藏和重写基类方法的区别
- java中属性的隐藏和方法的覆盖区别
- C#中属性和方法的区别
- Objective-C 中方法的重载,覆盖和隐藏
- c#中隐藏,重写的区别
- c#隐藏基类方法和重写基类方法的区别
- c#隐藏基类方法和重写基类方法的区别
- c#中隐藏控制台的方法
- C#中GridView隐藏列的方法
- c#中virtual和隐藏方法和new方法
- 关于C#中,继承类重写与隐藏基类方法的区别!
- C#中virtual 方法和abstract方法的区别 (转)
- 用exp导数据经常会遇到0行的表导不出来的情况
- multipart/form-data和application/x-www-form-urlencoded的区别
- Hadoop家族产品--大纲
- UIToolbar与UINavigationBar笔记
- JAVA模块化(二)
- C++和C#中隐藏方法的区别
- 安装pear及其组件
- 菱形图案的求法
- 10种排序算法总结
- ubuntu11.04下Discuz论坛的安装
- 漫画解说2013年IT行业大事件
- 动态规划——斐波那契算法
- Hibernate 4 出现错误:entity class not found:Stock
- android selector item 顺序