gpt4 book ai didi

c++ - 在 C++ 工厂方法的实现中遇到继承问题

转载 作者:行者123 更新时间:2023-11-30 03:16:58 25 4
gpt4 key购买 nike

对设计模式还很陌生,也许我已经错过了已回答的问题。由于继承问题,我在实践工厂设计模式时遇到了麻烦。

这是基类

 #ifndef FACTORY_H
#define FACTORY_H

#include <iostream>
#include "truckfactory.h"

class factory{

public:
std::string typeOfCar;
factory(){}

virtual void identifyCar(){
std::cout << "This car is a " + typeOfCar << std::endl;
}

truckfactory* createTruck(){
return new truckfactory();}
};
#endif

这是基工厂类的子类。

 #ifndef TRUCKFACTORY_H
#define TRUCKFACTORY_H

#include "factory.h"
class truckfactory : public factory{

public:
truckfactory(){
std::cout <<"TruckFactory made"<<std::endl;
typeOfCar = "truck";
}
};
#endif

尝试这样实现

 #include "factory.h"

int main(){

factory carFactory;
truckfactory* truck;
truck = carFactory.createTruck();

carFactory.identifyCar();
truck->identifyCar();

return 0;
}

但是我遇到了以下问题

./truckfactory.h:5:29: error: expected class name
class truckfactory : public factory
^
./truckfactory.h:11:13: error: use of undeclared identifier 'typeOfCar'
typeOfCar = "truck";
^
factorytest.cpp:10:12: error: no member named 'identifyCar' in 'truckfactory'
truck->identifyCar();

我一直在寻找其他继承问题,但找不到解决我正在寻找的问题的问题。

感谢帮助,如有转载请见谅

最佳答案

有几点需要考虑:

  1. 您的代码无法编译的原因在于其结构。您不能(或不应该)让 factory.h 包含 truckfactory.h,后者又包含 factory.h。循环依赖会给你带来问题。处理此问题的正常方法是像这样转发声明 truck_factory:
 #ifndef FACTORY_H
#define FACTORY_H

#include <iostream>

class truck_factory;

class factory{

public:
std::string typeOfCar;
factory(){}

virtual void identifyCar(){
std::cout << "This car is a " + typeOfCar << std::endl;
}

truckfactory* createTruck(); //Note definition must be in c++ file
};
#endif
  1. 从概念上讲,您的工厂应该构建对象,而不是其他工厂。例如,您可能有一个 factory 类,它知道如何制造卡车、汽车、摩托车等。为此,您需要定义一个 vehicle 类,然后再定义一个工厂它可以根据传入的类型构建正确的类。类似于:
class Vehicle {
public:
virtual std::string typeOfCar() const = 0;
void identifyCar() {
std::cout << "This car is a " + typeOfCar << std::endl;
}
};

class Factory {
public:
Vehicle* create_vehicle(const std::string& type); // need to somehow specify what type you want to create.
};

class Truck : public Vehicle {
virtual std::string typeOfCar() const { return "truck"; }
};

需要在 cpp 文件中定义 create_vehicle 函数以返回各种车辆类型。

关于c++ - 在 C++ 工厂方法的实现中遇到继承问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55876139/

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