virtual关键字

Posted 解决痛苦的根源来源于自律

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了virtual关键字相关的知识,希望对你有一定的参考价值。

出于多态的考虑,为了覆盖, 子类同名覆盖函数(函数名、参数、返回值都相同) virtual void print();

这也许会使人联想到函数的重载,但稍加对比就会发现两者是完全不同的:
(1)重载的几个函数必须在同一个类中;
覆盖的函数必须在有继承关系的不同的类中
(2)覆盖的几个函数必须函数名、参数、返回值都相同;
重载的函数必须函数名相同,参数不同。参数不同的目的就是为了在函数调用的时候编译器能够通过参数来判断程序是在调用的哪个函数。这也就很自然地解释了为什么函数不能通过返回值不同来重载,因为程序在调用函数时很有可能不关心返回值,编译器就无法从代码中看出程序在调用的是哪个函数了。
(3)覆盖的函数前必须加关键字Virtual;

以上是关于virtual关键字的主要内容,如果未能解决你的问题,请参考以下文章

覆盖方法时 virtual 关键字是啥意思?

C# 关键字--virtual(转)

C++ 风格:为覆盖方法添加前缀 virtual 关键字

C# virtual 这个关键字

virtual 关键字在 Entity Framework 4.1 POCO Code First 中可以产生啥影响?

C++ 类的多态一(virtual关键字--构造函数深刻理解)