我正在准备考试,而我正试图解决一个我怀疑可能无法解决的问题。
在超市,您购买的每件商品都有名称,成本和数量。
所以老师定义了这个课程:
class items {
public:
items(string, double, int);
void InputItems ();
void SetCount (int const);
string GetName () const;
string toString () const;
private:
string name;
double cost;
int count;
}
但是当你去超市时,你并不总是只买一件商品。你可以买几件物品。所以我们的问题是定义一个类Purchase
来处理类型为items
的数组。
我这样定义:
class Purchase
{
private:
items *arr;
int max_items,current_items;
public:
Purchase(int New_max_items){
max_items=New_max_items;
current_items=0;
arr= new items("",0,0)[max_items];
}
void AddItem(items const newitems);
items RemoveItem(string const name);
int Find(string const name);
int const sum();
int get_now();
items &operator[](int) const;
}
该练习要求我实施items &operator[](int) const;
和int const sum();
。我设法实现了运营商:
goods & Purchase::operator[](int i) const
{
if ((i>=0)&&(i<current_items))
return arr[i];
}
没问题。
问题在于能够将购买的全部费用相加。
我无法直接访问arr[i].cost
和arr[i].count
,因为他们是班级Items
的私人成员,因为老师,我无法间接获得他们不包括班级Items
中的班级成员的getter函数。
是否可以编写一个程序,在不更改班级Items
的情况下返回整个购买的总和?
答案 0 :(得分:0)
也许目的是在项目名称和成本的类外面有一个表。 因此,您可以调用GetName()和GetCount()并查找外部表(地图或哈希表)中每个项目的成本。
答案 1 :(得分:-1)
class Purchase
{
private:
items *arr;
int max_items,current_items;
**int sum;**
public:
Purchase(int New_max_items){
max_items=New_max_items;
current_items=0;
arr= new items("",0,0)[max_items];
**sum = 0;**
}
.
.
.
在AddItems()
中增加价格,并在RemoveItems()
递减它;)