sách gpt4 ai đã đi

Khai báo lớp trừu tượng/cụ thể của C++

In lại 作者:太空宇宙 更新时间:2023-11-04 13:16:00 27 4
mua khóa gpt4 Nike

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

class MotorDefinition {
công cộng:
MotorDefinition(int p1, int p2, int p3) : pin1(p1), pin2(p2), pin3(p3) {}
int pin1 = -1;
int pin2 = -1;
int pin3 = -1;
};
class Motor {
công cộng:
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 {
công cộng:
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);

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

1 Câu trả lời

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

MotorTypeZumoLeft *leftMotor(lmd);

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

MotorTypeZumoLeft leftMotor(lmd);

rightMotor 也类似。

MotorTypeZumoRight rightMotor(rmd);

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

MotorTypeZumo motors(&leftMotor, &rightMotor);

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

auto leftMotor = std::make_unique(lmd);
auto rightMotor = std::make_unique(lmd);

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

class MotorTypeZumo {
công cộng:
MotorTypeZumo(
std::unique_ptr &l,
std::unique_ptr &r)
: left(std::move(l)), right(std::move(r)) {}
protected:
std::unique_ptr left;
std::unique_ptr right;
};

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

MotorTypeZumo motors(leftMotor, rightMotor);

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

27 4 0
太空宇宙
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com