2010-12-09 15 views
0
class A1{ 
    public void op(){cout << "A1";} 
}; 

class B1 : public A1{ 
    public void op(){cout << "B1";} 
}; 

Semble valide pour moi, mais le compilateur de rapports:Comment corriger le code C++ ci-dessous?

erreur, prévu un ':' à void

Répondre

2
class A1 { public: void op() {cout << "A1";}}; 

class B1 : public A1 { public: void op() {cout << "B1"; }}; 

PS. Aussi peut-être voulez-vous utiliser des méthodes virtuelles?

5
class A1 
{ 
    public: 
     virtual void op(){cout << "A1";} 
}; 

class B1 : public A1 
{ 
    public: 
     void op(){cout << "B1";} 
}; 

Prenez garde à ajouter le mot-clé virtual, sinon, vous ne surchargez pas void op(); en B

+3

Un destructeur virtuel est également requis pour 'A1' – Naveen

+1

@Naveen: oui, vous devez ajouter un destructeur virtuel mais ce n'est pas strictement nécessaire dans ce cas très particulier puisqu'il n'y a pas de membre de données. –

+1

Pour répondre à la question, nous pourrions insister sur la réponse de Visage: des points-virgules sont nécessaires après le mot-clé 'public'. Le destructeur virtuel manquant ne sera impliqué qu'en considérant les fuites de mémoire, pas la compilation. Il devrait cependant générer des avertissements. – jopasserat

2
class A1{ 
     public: void op(){cout << "A1";} 
}; 

class B1 : public A1{ 
     public: void op(){cout << "B1";} 
}; 

:) C++ a une syntaxe différente de C#. En C++, il est moins bavard, de sorte que vous pouvez faire:

class A1{ 
public: 
    void a(){cout << "x";} 
    void b(){cout << "x";} 
    void c(){cout << "x";} 
}; 

au lieu d'avoir à mettre public devant toutes les méthodes publiques.