为什么C++不提供override这个关键字呀?

原创 2006年05月22日 14:58:00
class Parent {
public:
    virtual void foo(int i=0) {
        cout << "Parent::foo() " << i << endl;
    }
};

class Son : public Parent {
public:
    virtual void foo() {
        cout << "Son::foo()" << endl;
    }
};
C++里关于虚函数声明的语法,一直很让我很不舒服,一再提醒自己小心小心,结果今天还是出了问题。看左边的示例,最早在Parent类中的foo这个虚函数,是没有参数的,所以一切都工作得很好,昨天因为需要,就把Parent类的foo函数加上一个默认参数,这个时候,其实Son类中声明的foo函数已经与父类毫无关系了,两个函数各是各的,但编译器没有任何警告……
这个时候,就看出delphi和c#里override关键字的好处来了,有了这个关键字,一旦父类修改了虚函数,编译器立马可以给出警告来,总之,编译器应该能够防止程序员犯错误,尽最大可能地将这一切严谨化。
唉,看来用C++,一辈子也别指望会引入override关键字了。
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C++ 11继承控制关键字:override(虚函数重载)和final(阻止继承、虚函数重载)

C++ 11添加了两个继承控制关键字:override和final。override确保在派生类中声明的重载函数跟基类的虚函数有相同的签名。final阻止类的进一步派生和虚函数的进一步重载。接下来让我...

C#关键字之override详解

重载、重写、覆写,分别指的是overload、override、new。 一、override重写,是在子类中重写父类中的方法,两个函数的函数特征(函数名、参数类型与个数)相同。用于扩展或修改继承的...

C#中的一些方法修饰关键字virtual override sealed new

对于方法(属性、事件) 1. 如想重写(扩展和修改继承)方法要求有两个     a. 基类必须是virtual     b. 继承类型的同签名方法必须override也就是说基类和继承类都必须同...

使用 Override 和 New 关键字进行版本控制(C# 编程指南)

C# 语言经过专门设计,以便不同库中的 基类与派生类之间的版本控制可以不断向前发展,同时保持向后兼容。这具有多方面的意义。例如,这意味着在基 类中引入与派生类中的某个成员具有相同名称的新成员在...

使用 Override 和 New 关键字进行版本控制(C# 编程指南)

原文地址:点击打开链接base and derived classes in different libraries can evolve and maintain backward compatib...

转:C#继承之base,virtual,override,abstract,new,sealed关键字

转自:http://www.cnblogs.com/YuanSong/archive/2012/07/20/2601224.html 1.base 关键字 Base 关键字用于从派生类中访问基...

c#的new、abstract、virtual、override,sealed关键字区别

new 与 override的区别引用AnyTao博客中的一句话: 覆写(override)与重载(overload),是成就.NET面向对象多态特性的基本技术之一 正如某网友说的那一句话: O...

override与new关键字

override:重写,用在子类方法前,表示子类方法重写基类方法的抽象实现或者虚实现。 new:用在子类方法前,表示该方法与基类完全独立,属于子类本身。   基类代码: class Virtu...
  • tiana0
  • tiana0
  • 2013-11-21 22:18
  • 1485

C#的override关键字

override (C# Reference) The override modifier is required to extend or modify the abstract ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)