gpt4 book ai didi

c++ - 对C++继承真的很困惑

转载 作者:行者123 更新时间:2023-11-30 02:44:48 25 4
gpt4 key购买 nike

所以我对 C++ 继承真的很困惑。我一直在网上阅读,但似乎无法很好地理解它。

我有一个包类,包可以是信件、盒子或 crate 。

每个包裹都有运单号、重量和运费。

有一个成本函数需要从基类中覆盖。所以我一直在写这个,但似乎无法让它正常工作。

我主要对如何处理 Package 感到困惑。由于所有包都将具有这三个属性,我是在 package.cpp 中制作一个 setter 还是在每个子类中制作 setter 来设置属性?每个包都必须有自己的构造函数,对吗?在我的子类中,我只包含 package.h 因为那是父类(super class)?如果我只是将它用作本质上的接口(interface),我什至需要 package.cpp 中的任何内容吗?

这是我的 Package 类的样子:

class Package{

protected:
double price;
int weight;
int trackingNumber;

public:
void setPrice(double price);
void setWeight(int weight);
void setTrack(int trackNum);

virtual double cost(int weight) = 0;
};

我这样做是否正确,或者我应该在我的子类中完成大部分工作,例如构造函数和解构函数?

最佳答案

如果在实例化派生类时这些属性的值是已知的,那么您不需要在基类或派生类中定义这些 setter 。您可以在派生类的构造函数中将它们传递给基类。

例如,

class Package
{
public:
Package(double price, int weight, int trackNum)
{}
...
};

class DerivedPackage: public Package
{
public:
// Pass to the contructor of the base class
DerivedPackage(double price, int weight, int trackNum):
Package(price, weight, trackNum)
{}
...
};

如果在对象构造期间无法确定值(即,您需要稍后设置它们),我建议您将这些 setter 放在基类的公共(public)部分,因为它们是您的一部分接口(interface),因此可以重用(例如,如果您稍后添加更多派生类)。

关于c++ - 对C++继承真的很困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25072102/

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