为什么“一般而言,在基类和派生类中提供同名的non-virtual函数,不是一个好的解决办法”

今天在看Essential C++ 第5章时,看到这句话:

  一般而言,在基类和派生类中提供同名的non-virtual函数,并不是好的解决方法。基于此点而归纳出来的结论或许是:基类中的所有函数都应该被声明为virtual。我并不认为这是个正确的结论,但它的确可以马上解决我们所面临的两难困境。

  上述作者描述中的红色字体部分,暂时还不知道是什么原因。下面先举个例子说明一下为什么“在基类和派生类中提供同名的non-virtual函数,并不是好的解决方法”。

1、Base.h文件:定义了一个display()函数

1 class Base
2 {
3 public:
4 Base(void);
5 void display() const;
6 virtual ~Base();
7 };

2、Base.cpp:实现这个display()函数

1 Base::~Base()
2 {
3 std::cout << "Base destructor \n";
4 }
5
6 void Base::display() const
7 {
8 std::cout << "Base display() function \n" ;
9 }

现在类Inherit继承Base类

3、Inherit.h文件

1 class Inherit
2 :Base
3 {
4 public:
5 Inherit(void);
6 ~Inherit();
7 void display() const;
8 };

4、Inherit.cpp文件

1 Inherit::~Inherit()
2 {
3 std::cout << "Inherit destructor \n" ;
4 }
5
6 vodi Inherit::display() const
7 {
8 std::cout << "Inherit display() function \n" ;
9 }

5、然后我们在main函数里面测试

1 int _tmain(int argc, _TCHAR* argv[])
2 {
3 Base *pInherit = new Inherit();
4 pInherit->display();
5 }

明显这里会调用基类的display(),这里只是简单的举例调用关系,如果我们的程序里面基类和派生类同名的函数里面有一些内存方面的操作,那这样如果程序比较大,就比较不容易查出来哪里出错了。。Essential C++书里面在这里的解决方法是在继承类里新建一个同名但参数不一样的函数,这样就不只是单独继承基类的函数。详细的代码可以看Essential C++ P153

 

原文链接: https://www.cnblogs.com/ziyoudefeng/archive/2012/03/19/2407037.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    为什么“一般而言,在基类和派生类中提供同名的non-virtual函数,不是一个好的解决办法”

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/44552

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 下午9:11
下一篇 2023年2月8日 下午9:12

相关推荐