当前位置:  开发笔记 > 编程语言 > 正文

具有参数的非纯虚函数是不是很难实践?

如何解决《具有参数的非纯虚函数是不是很难实践?》经验,为你挑选了3个好方法。

我有一个带有可选虚函数的基类

class Base {
    virtual void OnlyImplementThisSometimes(int x) {}
};

当我编译它时,我得到一个关于未使用的param x的警告.还有其他方法我应该实现虚拟功能吗?我重写了这样的话:

class Base {
    virtual void OnlyImplementThisSometimes(int x) 
    {
        x = 0;
    }
};

我还有一个问题,如果我不小心,我制作的子类可以实现错误的功能,然后由于重载我没有注意到:例如

class Derived : public Base {
    void OnlyImplementThisSometimes(int x, int y) { // some code }
};

Derived d;
Base *b = dynamic_cast(&d);
b->OnlyImplementThisSometimes(x); // calls the method in the base class

调用基类方法是因为我使用"int y"参数实现了派生函数,但没有对此进行警告.这些只是C++中常见的陷阱还是我误解了虚函数?



1> 小智..:

忽略设计问题,您可以通过省略变量名来绕过编译器警告有关未使用的变量,例如:

virtual void OnlyImplementThisSometimes(int ) { }

在尝试覆盖虚函数时错误地实现了错误的方法签名只是在C++中需要注意的事情.C#等语言使用'override'关键字来解决这个问题.



2> Graeme Perro..:

我们将宏定义_unused为:

#define _unused(x) ((void)x)

然后将函数定义为:

virtual void OnlyImplementThisSometimes(int x) { _unused( x );}

这不仅使编译器不会抱怨,而且让任何维护代码的人都明白你没有忘记x - 你故意忽略它.



3> Chris Thomps..:

为什么要在基类中定义它?如果基类不打算使用该方法,那么只需将其定义为派生类中的虚方法即可.

或者默认实现可能会抛出异常

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有