C++ Virtual介绍
来源:互联网 发布:龙的传人 王力宏 知乎 编辑:程序博客网 时间:2024/06/05 18:43
参考链接:http://www.cnblogs.com/xd502djj/archive/2010/09/22/1832912.html
学过C++的人都知道在类Base中加了Virtual关键字的函数就是虚拟函数(例如函数print),于是在Base的派生类Derived中就可以通过重写虚拟函数来实现对基类虚拟函数的覆盖。当基类Base的指针point指向派生类Derived的对象时,对point的print函数的调用实际上是调用了Derived的print函数而不是Base的print函数。这是面向对象中的多态性的体现。
class Base{public:Base(){}public: virtual void print(){cout<<"Base";}};class Derived:public Base{public:Derived(){}public: void print(){cout<<"Derived";}};int main(){ Base *point=new Derived(); point->print();}Output:Derived
这也许会使人联想到函数的重载,但稍加对比就会发现两者是完全不同的:
(1)
- 重载的几个函数必须在同一个类中;
- 覆盖的函数必须在有继承关系的不同的类中
(2)
- 覆盖的几个函数必须函数名、参数、返回值都相同;
- 重载的函数必须函数名相同,参数不同。参数不同的目的就是为了在函数调用的时候编译器能够通过参数来判断程序是在调用的哪个函数。这也就很自然地解释了为什么函数不能通过返回值不同来重载,因为程序在调用函数时很有可能不关心返回值,编译器就无法从代码中看出程序在调用的是哪个函数了。
(3)
- 覆盖的函数前必须加关键字Virtual;
- 重载和Virtual没有任何瓜葛,加不加都不影响重载的运作。
0 0
- c++virtual
- C++ Virtual介绍
- 关于C#:abstract,virtual
- C++Virtual详解
- Virtual & Abstract (C++)
- C#virtual override new
- C++ virtual 继承
- C# 关键字--virtual
- c++------virtual const static
- C++virtual继承
- c++Virtual关键字
- C++:virtual关键字
- C#---virtual与abstract
- C++(2)继承/virtual
- 【温故知新C/C++】vector||max ||virtual(C++)
- virtual和override(C#)
- 【C++】template vs virtual function
- C#virtual,override,new学习
- hdoj 1501 Zipper 【DFS + 剪枝】
- 欧拉路的判定 http://hihocoder.com/problemset/problem/1176
- Sublime Text 3能用支持的插件推荐
- Eclipse:open output file blabla.exe: Permission denied
- java图片居中裁剪
- C++ Virtual介绍
- js中数组元素去重复函数
- STL之vector容器详解
- Sizeof 关键字
- 比较全面的MySQL优化参考
- XML 中元素和节点的区别
- STL之list容器详解
- JSF探索--URL映射,web.xml配置
- Class.forName().newInstance()和通过new得到对象的区别