gpt4 book ai didi

c++ - 关于我项目中的抽象类

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

我的项目中有以下课程:

Product(这是基类)

FarmProduct(源自产品)

FruitProduct(源自FarmProduct)

(这3个班级是演示班,我还有很多)。

我还具有以下两个功能:

CalcPrice-在“生产”中不执行任何操作,但在“农场和水果”中执行任何操作。

Print-每个班级的作品,注释-水果印刷品必须包含产品和农场印刷品。

并且主要是以下代码:

int main() {
Product pro(123, 'A', 1, 22, 1, 1);
FarmProduct farm(1, 2, 3, "Kiwi", pro);
Product *products = new Fruit(1, farm);
products->Print();
products->Calc();
}


我的问题是:
我是否需要做“产品”抽象类并仅使用指针?
要么
我是否应该创建一个新的抽象类并将函数的“ Print()”和“ Calc()”放入其中,而Product类将是她固有的? (因此,“农场和水果”也将是固有的)。

谢谢你!
ps-可能是一些语法错误,我的母语不是英语:)

最佳答案

“ CalcPrice-在Product中不执行任何操作,但在Farm and Fruit中进行操作。”


是的,这足以证明让Product成为抽象类

 class Product {
public:
Money CalcPrice() const = 0;
void Print() {
// Output concrete members known in the abstract class here
std::cout << "'" << category_ << "', "
<< a_ << "', "
<< b_ << "', "
<< c_ << "', "
<< d_;
PrintExtensions(); // Allow derived classes to print additional stuff
std::cout << std::endl;
}
protected:
Product(char category, int a, int b, int c, int d)
: category_(category), a_(a), b_(b), c_(c), d_(d) {
}
virtual void PrintExtensions() {
// Does nothing in the base class
}

private:
char category_;
int a_;
int b_;
int c_;
int d_;
};


派生类应该看起来像这样

 class FarmProduct : public Product {
public:
FarmProduct(int a, int b, int c, int d, std::string name)
: Product('A',a,b,c,d), name_(name)
virtual Money CalcPrice() const {
Money price;
// calculate the price and return
return price;
}
protected:
virtual void PrintExtensions() {
std::cout << ", '" << _name;
}
private:
std::string name_;
};




class FruitProduct : public FarmProduct {
public:
FruitProduct(int d, const std::string& name)
: FarmProduct(1, 2, 3, d, name) {
}
};




虽然你不能做这样的事情

 Product pro(123, 'A', 1, 22, 1, 1);


然后。

关于c++ - 关于我项目中的抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27750651/

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