gpt4 book ai didi

c++ - 从基类中选择子类......可能吗?

转载 作者:行者123 更新时间:2023-11-28 01:09:22 25 4
gpt4 key购买 nike

我正在学习 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);

...........

}

最佳答案

这不是个好主意。

通常答案是dynamic_cast,但是从基类调用后代的特定行为通常是一个糟糕的设计标志。

您可以尝试反转类层次结构并使用模板。

关于c++ - 从基类中选择子类......可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4240774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com