C++ 子函数中的纯虚函数和未使用的参数

Posted

技术标签:

【中文标题】C++ 子函数中的纯虚函数和未使用的参数【英文标题】:Pure virtual functions and unused arguments in child functions in C++ 【发布时间】:2011-07-19 20:28:15 【问题描述】:

我有以下几点:

class Parent 
public:
    virtual bool foo(vector<string> arg1, vector<string> arg2) = 0;
;

class Child : public Parent 
public:
    bool foo(vector<string> arg1, vector<string> arg2);
;

// arg1 and arg2 not used - GIVES WARNING
bool Child::foo(vector<string> arg1, vector<string> arg2) 
    return false;

foo(...) 没有 Parent 实现,因为它是一个纯虚函数。父母说 foo 有两个向量参数。孩子用两个字符串参数正确地实现了它,但它们没有被使用。然而,Parent 的一些孩子会使用这些参数,所以他们需要一直在那里。

有什么方法可以使用重载来允许给定子类中的 foo 没有参数,即使父级说它必须有?

非常感谢。

【问题讨论】:

除非你想复制arg1arg2,否则最好通过const引用传递向量。 这几乎不是一个“过载问题”——你在这里谈论的是一个小警告:-) 编辑以删除标题中的重载 - 同意抱歉:-S. 【参考方案1】:

不要指定参数名称:

// arg1 and arg2 not used - GIVES WARNING
bool Child::foo(vector<string>, vector<string>) 
    return false;

这应该可以解决警告。

如果您的编译器出于某种原因不支持它 - 请执行以下操作:

// arg1 and arg2 not used - GIVES WARNING
bool Child::foo(vector<string> arg1, vector<string> arg2) 
    (void)arg1; (void)arg2; // ignore parameters without "unused" warning
    return false;

【讨论】:

根据您的编译器,您还可以使用一些#pragma 语句来禁用此警告。在 VC++ 下:#pragma 警告 (disable:warningNumber)。在 Borland 下:#pragma warn -nnn。在 GCC 下我不知道。 @Shlublu - 是的,但我认为抑制警告是一件坏事,最好编写不生成警告的代码。在这种情况下,这很容易(尽管第二种解决方案有点“脏”)。 @littleadv:我同意,但有时这会有所帮助。我倾向于使用 pragma 指令而不是第二个选项,因为它不涉及代码本身。如果删除参数的名称当然是不够的。 你可以为第二个选项使用宏#define UNUSED(x) (void)x 然后它看起来像一个文档 @yi_H 太棒了!并且便携。

以上是关于C++ 子函数中的纯虚函数和未使用的参数的主要内容,如果未能解决你的问题,请参考以下文章

C++中重载加减乘除等运算符的纯虚函数中的返回类型怎么定义??运算符中参数怎么写??

C++中的纯虚析构函数

c++中的纯虚函数机制如何从DLL中暴露函数

C++纯虚函数和抽象类

C++的纯虚函数实现和头文件

C++ 纯虚函数和抽象类