Mixer du virtuel et non-virtuel dans une sous-classe
Bonjour,
J'ai une question de debutant: je voudrais tirer avantage du polymorphisme mais aussi avoir des fonctions specifiques dans mes sous-classes derivees de classe abstraite. Comment faire ?
Voici un exemple:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
#include <iostream>
using namespace std;
//A is
class A {
public:
A() {}
virtual void print() = 0;
};
class B : public A {
protected:
int b;
public:
B() : A() {}
void print() { cout << "I am a B" << endl;}
void setb(int n) {b = n;}
};
int main(int argc, char** argv) {
A* objb = new B();
objb->print();
objb->setb(3); //error! 'class A' has no member named 'setb'
} |
Je pourrais mettre setb en virtuel dans la classe abstraite, mais ca n'aurait pas beaucoup de sens: setb est une fonction qui change b, specifique de la classe B, ca ne devrait pas faire partie de l'interface fournie par A. Ou alors je pourrais creer B comme un B* objb, mais je perdrais le polymorphisme sur print(). Comment fait-on pour ajouter a une interface des fonctions specifiques a mes sous-classes?
Merci d'avance.