C++ des fonctions virtuelles de la mise en œuvre à l'extérieur de la classe

Je suis novice en C++. Tout en essayant exemple de polymorphisme de code, j'ai trouvé que la classe de base virtuelle définition de la fonction dans la classe dérivée n'est possible que lorsqu'il est défini dans la classe dérivée ou à l'extérieur avec de la déclaration dans la classe dérivée.

Code suivant donne une erreur:

class B
{
public:
    virtual void f();
};

void B::f() {
    std::cout<<"B::f";
}

class D : public B
{
public:
    void f2() {int b;}
};

//error: no "void D::f()" member function declared in class "D"
void D::f() {
    std::cout<<"D::F";
}

Il fonctionne si je déclare f() à l'intérieur de D. je me demandais pourquoi dois-je déclarer explicitement la fonction de nouveau quand il est déjà déclarée dans la classe de Base. Le compilateur peut obtenir la signature de la classe de Base droit?

Merci d'avance..

vous avez fait f() dans une fonction virtuelle dans la classe de base, donc il est abstrait et doivent être mises en œuvre dans votre D de la classe. Vous pouvez en lire plus à propos de fonction virtuelle ici parashift.com/c++-faq-lite/virtual-fonctions.html#faq-20.1
non, il n'est pas vrai, si c'était abstract =0 suivre la déclaration de la méthode.
est le bon mot. une fonction virtuelle peut ou ne peut pas être pur. aussi, "abstrait", décrit la classe, pas la fonction virtuelle. et B ne pas déclarer une fonction virtuelle pure.
Je suppose que B::f() n'est pas abstraite, sa définition de B existe. Est-il besoin d'être défini en ligne dans le B pour s'assurer de son caractère concret?
"I was wondering why do I need to explicitly declare the function again". Ce sont les règles du jeu c++.

OriginalL'auteur Manish | 2010-12-21