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

本文探讨了在C++编程中基类与派生类使用同名非虚函数的问题及潜在风险,通过具体代码示例展示了这种做法可能导致的运行时错误。

今天在看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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值