gpt4 book ai didi

c++ - 继承和纯虚函数

转载 作者:行者123 更新时间:2023-11-28 03:33:29 26 4
gpt4 key购买 nike

我正在学习 C++ 中的继承,并且我不熟悉抽象纯虚拟类、基类和派生类。所以我想出了下面的代码,它可以工作,但我不确定我是否正确地实现了 C++ 原则。请有人评估以下代码以进行改进。

#include <iostream>
using namespace std;

class Pizza
{
private:
double pCost;
double pPrice;

public:
Pizza(const double& c, const double& p) : pCost(c), pPrice(p){}
virtual ~Pizza(){}
virtual double area() = 0;
virtual double cost() = 0;
virtual double price () = 0;
virtual double profit() = 0;
double getCost() const {return pCost;}
double getPrice() const {return pPrice;}
};

class CircularPizza : public Pizza
{
private:
double radius;

public:
CircularPizza(const double& r, const double& c, const double& p)
: Pizza(c, p), radius(r){}
virtual ~CircularPizza(){}
virtual double area(){ return (3.14 * radius * radius);}
virtual double cost() { return area() * getCost(); }
virtual double price() { return area() * getPrice(); }
virtual double profit() { return price() - cost();}
};

最佳答案

如果我要更改任何内容,我会让 cost()、price()profit() 成为非虚拟的,并在基 Pizza 类。

这是有道理的,因为它们都取决于面积——这是 CircularPizza 唯一真正定义的东西。如果你要做一个RectangularPizza类,单位面积的成本、单位面积的价格、利润的计算都是一样的。唯一会改变的是该地区本身。意识到这一事实应该引导您以相同的方式设计类,其中只有区域发生变化,而其他代码对于使用基类的 CircularPizzaRectangularPizza 是通用的.

关于c++ - 继承和纯虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11873957/

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