zoukankan      html  css  js  c++  java
  • Effective C++条款37: 决不要重新定义继承而来的非虚函数

    该条款最终结论:任何条件下都要禁止重新定义继承而来的非虚函数。

    或者说,应该避免“隐藏”现象的发生(所谓隐藏,即派生类重新定义基类的非虚函数)。另一个概念“覆盖”即对虚函数的重新实现的发生是正常的。

    从继承和实现的角度看,虚函数是一个接口,实现可以不同,或者说特性可以不同。但是非虚函数表示一种固有的不变的特性,所以不要改变这个不变的特性,否则违背公有继承“是一个”的原则。

    class A
    {
    public:
    	void fun(int a, int b)
    	{
    		cout << "A" << endl;
    	}
    };
    
    class B : public A
    {
    public:
    	void fun(int a)
    	{
    		cout << "B" << endl;
    	}
    };
    
    
    int main()
    {
    	B b;
    	b.fun(1, 3);//error, B::fun()隐藏了A::fun(),如果B中不定义一个参数的fun(),那么此处是正确的,因为B中不定义fun时,相当于继承了A中的fun.
    
    	return 0;
    }
    
  • 相关阅读:
    去掉滚动条
    一些input用法
    jquery-ui datepicker
    js修改样式
    js时间
    跳转到页面的某个anchor
    事件传递
    flex对象.show()的时候display变成block
    html中传递信息
    button disable and enable
  • 原文地址:https://www.cnblogs.com/helloweworld/p/3103348.html
Copyright © 2011-2022 走看看