2011-07-19 10 views
5

Mam następujący:Czyste funkcje wirtualne i niewykorzystane argumenty funkcji podrzędnych w C++

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; 
} 

Nie ma realizacja dominującą Foo (...), ponieważ jest to czysta funkcja wirtualna. Rodzic mówi, że foo przyjmuje dwa argumenty wektorowe. Dziecko implementuje je poprawnie z dwoma argumentami łańcuchowymi, ale nie są one używane. JEDNAK, niektóre dzieci rodzica BĘDĄ używać tych argumentów, więc muszą zawsze tam być.

Czy jest jakikolwiek sposób mogę użyć przeciążenia, aby umożliwić foo w danej klasie Dziecko, aby nie mieć argumentów, mimo że rodzic mówi, że musi?

Wielkie dzięki.

+3

ile chcesz skopiować 'arg1' i' arg2', lepiej zdać wektory przez const odniesienia. – kennytm

+1

To wcale nie jest "problem z przeciążaniem" - mówisz tutaj o niewielkim ostrzeżeniu :-) –

+0

Edytowanie w celu usunięcia przeciążenia z tytułu - uzgodniono przepraszam: -S. – ale

Odpowiedz

18

Nie określić nazwy parametrów:

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

To powinno rozwiązać ostrzeżenia.

Jeśli kompilator z jakiegoś powodu nie obsługuje - to zrobić:

// 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; 
} 
+1

W zależności od kompilatora możesz również użyć niektórych instrukcji #pragma, aby wyłączyć to ostrzeżenie. Pod VC++: #pragma warning (disable: warningNumber). W ramach Borland: #pragma warn -nnn. W GCC nie wiem. – Shlublu

+1

@Shlublu - tak, ale myślę, że tłumienie ostrzeżeń to zła rzecz, lepiej napisz kod, który ich nie generuje. W tym przypadku jest to dość łatwe (chociaż drugie rozwiązanie jest nieco "brudne"). – littleadv

+0

PERFEKCYJNE DZIĘKI. Przyjmuje do wiadomości, gdy upłynie limit czasu na rozwiązanie problemu stackoverflow. – ale