gpt4 book ai didi

C++ 抽象/具体类声明

转载 作者:太空宇宙 更新时间:2023-11-04 13:16:00 26 4
gpt4 key购买 nike

我有一个 MotorDefinition 类和一个名为 Motor 的抽象类:

class MotorDefinition {
public:
MotorDefinition(int p1, int p2, int p3) : pin1(p1), pin2(p2), pin3(p3) {}
int pin1 = -1;
int pin2 = -1;
int pin3 = -1;
};
class Motor {
public:
Motor(MotorDefinition d) : definition(d) {}
virtual void forward(int speed) const = 0;
virtual void backward(int speed) const = 0;
virtual void stop() const = 0;
protected:
MotorDefinition definition;
};

我的 Zumo 车辆有两个电机:

class MotorTypeZumoLeft : public Motor {
MotorTypeZumoLeft(MotorDefinition def) : Motor(def) {}
void Motor::forward(int speed) const {}
void Motor::backward(int speed) const {}
void Motor::stop() const {}
};

class MotorTypeZumoRight : public Motor {
MotorTypeZumoRight(MotorDefinition def) : Motor(def) {}
void Motor::forward(int speed) const {}
void Motor::backward(int speed) const {}
void Motor::stop() const {};
};

class MotorTypeZumo {
public:
MotorTypeZumo(MotorTypeZumoLeft *l, MotorTypeZumoRight *r) : left(l), right(r) {}

protected:
MotorTypeZumoLeft *left;
MotorTypeZumoRight *right;

};

不幸的是(对我来说),这不能编译:

MotorDefinition lmd(1, 2, 3);
MotorTypeZumoLeft *leftMotor(lmd);
MotorDefinition rmd(4, 5, 6);
MotorTypeZumoRight *rightMotor(rmd);
MotorTypeZumo motors(*leftMotor, *rightMotor);

我想我遗漏了一些基本概念,而且我肯定弄乱了一些语法。你能帮我正确定义这个吗?

最佳答案

以下不起作用,因为您不能使用 MotorDefinition 实例初始化指针变量。

MotorTypeZumoLeft *leftMotor(lmd);

您可能不希望 leftMotor 成为指针。

MotorTypeZumoLeft leftMotor(lmd);

rightMotor 也类似。

MotorTypeZumoRight rightMotor(rmd);

您需要传递地址来初始化电机:

MotorTypeZumo motors(&leftMotor, &rightMotor);

但是,如果您确实打算将 leftMotorrightMotor 作为指针,则最好使用智能指针而不是原始指针。

auto leftMotor = std::make_unique<MotoTypeZumoLeft>(lmd);
auto rightMotor = std::make_unique<MotoTypeZumoRight>(lmd);

并且,您应该修改 MotorTypeZumo 以也使用智能指针。

class MotorTypeZumo {
public:
MotorTypeZumo(
std::unique_ptr<MotorTypeZumoLeft> &l,
std::unique_ptr<MotorTypeZumoRight> &r)
: left(std::move(l)), right(std::move(r)) {}
protected:
std::unique_ptr<MotorTypeZumoLeft> left;
std::unique_ptr<MotorTypeZumoRight> right;
};

然后,您可以将 leftMotorrightMotor 传递给 motors

MotorTypeZumo motors(leftMotor, rightMotor);

关于C++ 抽象/具体类声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37357165/

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