私はC++を学んでいますが、問題が残っています。私はベースクラス内の特定のサブクラスを使用する方法が必要です。それは意味をなさないか、間違ったアプローチを使用していますか? SelectBrandはサブクラスを選択する必要があります。どうすればいいですか?ここに私の簡略化されたクラス以下ベースクラスからサブクラスを選択できます...可能ですか?
:
-----
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);
...........
}
あなたの例では、あまりにも多くの '....'セクションがあります。 'selectBrand'が実際に何をするのかは不明です:' X'は何ですか?そして 'use subclass 'はどういう意味ですか? – casablanca
サブクラスを取得するためにオブジェクトをダウンキャストしようとしている場合は、あなたのアプローチに欠陥があります。私は非常に多くのコードを提供することは混乱していると思います。主要なクラス、メソッド、そして使い方についてはどうですか? – belwood
'〜Device()'はおそらく 'virtual'でしょう。 – fredoverflow