Ich lerne C++ und ich bin mit einem Problem fest. Ich brauche eine Möglichkeit, eine bestimmte Unterklasse innerhalb der Basisklasse zu verwenden. Macht es Sinn oder verwende ich einen falschen Ansatz? SelectBrand sollte die Unterklasse auswählen, wie kann ich das tun?Unterklasse aus Basisklasse auswählen ... möglich?
Hier unten meine vereinfachte Klassen:
-----
class Protocol {
public:
Protocol() {};
~Protocol() {};
int openPort();
int readPort(char *buffer);
.....
private:
Protocol (const Protocol&);
};
int Protocol::openPort() {......};
int Protocol::readPort() {.........};
/***********************************************************************************/
class Device{
public:
Device(Protocol& port):_protocol(port){}
~Device();
virtual int getEvent(char *buffer) { return -1; }
int Device::selectBrand();
..............
protected:
Protocol& _protocol;
private:
int brand;
Device(const Device&orig);
};
Device::~Device() {}
int Device::selectBrand() {
......
switch (X)
case 1:
"use subclass Brand_B"
case 2:
"use subclass Brand_B"
.......
}
/***********************************************************************************/
class Brand_A:public Device {
public:
Brand_A(Protocol& port);
~Brand_A();
int getEvent(void *rawData);
private:
Brand_A(const Brand_A&);
};
Brand_A::Brand_A(Protocol& port):Device(port) {}
Brand_A::~Brand_A() {}
int Brand_A::getEvent(void *rawData) {
.... readPort(......);
}
/***********************************************************************************/
class Brand_B:public Device {
public:
Brand_B(Protocol& port);
~Brand_B();
int getEvent(void *rawData);
private:
Brand_B(const Brand_B&);
};
Brand_B::Brand_B(Protocol& port):Device(port) {}
Brand_B::~Brand_B() {}
int Brand_B::getEvent(void *rawData) {
.... readPort(......);
}
/* main **********************************************************/
int main(int argc, char **argv) {
Device *mydev;
char *buffer;
..............
mydev->selectBrand();
..........
mydev->getEvent(buffer);
...........
}
Es gibt viel zu viele '....' Abschnitte in Ihrem Beispiel. Es ist nicht klar, was 'selectBrand' tatsächlich tut: Was ist' X' und was meinst du mit "Use subclass"? – casablanca
Wenn Sie mit der "Auswahl" ein Objekt verkleinern möchten, um eine Unterklasse zu "bekommen", dann ist Ihr Ansatz fehlerhaft. Ich denke, die Bereitstellung von so viel Code ist verwirrend - wie wäre es nur mit den Schlüsselklassen, Methoden und wie Sie sie verwenden möchten? – belwood
'~ Device()' sollte wahrscheinlich 'virtuell' sein. – fredoverflow