Чистые виртуальные функции и неиспользуемые аргументы в дочерних функциях в C ++ - PullRequest
5 голосов
/ 20 июля 2011

У меня есть следующее:

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 (...), потому что это чисто виртуальная функция. Родитель говорит, что foo принимает два векторных аргумента. Ребенок реализует это правильно с двумя строковыми аргументами, но они не используются. ОДНАКО, некоторые дети Родителя БУДУТ использовать эти аргументы, поэтому они должны всегда быть там.

Можно ли как-нибудь использовать перегрузку, чтобы позволить foo в данном классе Child не иметь аргументов, даже если родитель говорит, что должен?

Большое спасибо.

1 Ответ

18 голосов
/ 20 июля 2011

Не указывайте имена параметров:

// 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...