gpt4 book ai didi

c++ - 从子类c++调用基类方法

转载 作者:行者123 更新时间:2023-11-30 04:20:22 26 4
gpt4 key购买 nike

我有 4 个类 Product 和 MultiBuyProduct(它是 product 的子类),用于计算价格,还有一个购物车,您可以将其添加到购物车中,从 MultiBuyProduct 调用函数获取价格并打印收据到控制台,和 Amount,这是一个接受 2 个整数并对它们进行一些计算的类,例如加减法,然后返回格式化的价格。从我的 main.cpp 调用

 MultiBuyProduct p2("Wine", Amount(10,0), 2, 10);
ShoppingCart SC;
SC.add(&p2 ,2, true);

下图为购物车添加方法

void ShoppingCart::add(Product *p, int quantity, bool end)
{
mProduct = p;
//Sets member vairable value
mQuantity = quantity;
//Gets Name of product 'p'
mProductName = mProduct->getName();
//Gets price of product 'p'
mAmount = mProduct->getPrice();
//Gets total price of product 'p' based on quantity
mAmountTotal = mProduct->getPrice(quantity);
//Updates the GrandTotal
mGrandTotal.add(mProduct->getPrice(0));
}

下面显示了 MultiBuyProduct getPrice

Amount MultiBuyProduct::getPrice(int quantity)
{
if(quantity >= mMinDiscountedQuantity)
{
mPrice.setFullPence(mPrice.getFullPence() * quantity);
mPrice.setPounds(mPrice.getFullPence()/100);
mPrice.setPence(mPrice.getFullPence()%100);

int j = mPrice.getFullPence() / 100 * mDiscountedPercent;
saving += j;
int i = mPrice.getFullPence() - j;

mPrice.setFullPence(i);
mPrice.setPounds(i/100);
mPrice.setPence(i%100);
return Amount(mPrice.getFullPence()/100, mPrice.getFullPence()%100);
}
else
{
return Product::getPrice(quantity);
}
}

好的,基本上功能正常,因为正确的总数被打印到控制台,显示 10% 已经打折,因为数量大于或等于 2。

但达到了我的 else 语句(在寻找商品的单一价格时在购物车添加方法中)

    mAmount = mProduct->getPrice();

但没有任何返回我认为这是因为产品出于某种原因不包含 MultiBuyProduct 具有的数据,我基本上需要使 Product 具有与 multiBuy 产品相同的数据然后调用它的获取价格。 (基本上就像在 Java 中我会调用(else super.getPrice(数量)<<< 但我知道你不能在 C++ 中这样做)

编辑:这是

的类结构

产品:

Product::Product(std::string name, Amount price):aName(name), mPrice(price)
{
}

MultiBuyProduct:

MultiBuyProduct::MultiBuyProduct(std::string aName, Amount price, int minDiscountedQuantity, int discountedPercent)
: mMinDiscountedQuantity(minDiscountedQuantity), mDiscountedPercent(discountedPercent),
mPrice(price), aName(aName)
{
mProduct = Product(mName,mPrice);
}

最佳答案

以下代码适用于 Visual Studio 2008

#include "stdafx.h"
#include <string>

using namespace std;
class Product
{
protected:
std::string aName;
double mPrice;
public:
Product::Product(std::string name, double price):aName(name), mPrice(price)
{
}

double getPrice(int quantity)
{
return mPrice*quantity;
}
};

class MultiBuyProduct : Product
{
int mMinDiscountedQuantity, mDiscountedPercent;

public:
MultiBuyProduct::MultiBuyProduct(std::string name, double price, int minDiscountedQuantity, int discountedPercent)
: mMinDiscountedQuantity(minDiscountedQuantity), mDiscountedPercent(discountedPercent), Product(name, price)
{
}
double MultiBuyProduct::getPrice(int quantity=1)
{
if(quantity >= mMinDiscountedQuantity)
{
return (mPrice*quantity) - (mPrice*mDiscountedPercent/100);
}
else
{
return Product::getPrice(quantity);
}
}
};
int _tmain(int argc, _TCHAR* argv[])
{
MultiBuyProduct p2("Wine", 10.0, 2, 10);
MultiBuyProduct *mProduct = &p2;
//Sets member vairable value
int mQuantity = 2;
//Gets Name of product 'p'
//Gets price of product 'p'
double price = mProduct->getPrice();
//Gets total price of product 'p' based on quantity
double mAmountTotal = mProduct->getPrice(mQuantity);
//Updates the GrandTotal
double mGrandTotal = mProduct->getPrice(0);
return 0;
}

关于c++ - 从子类c++调用基类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15337105/

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