组合和聚合没有出现在输出 C++ 中
Posted
技术标签:
【中文标题】组合和聚合没有出现在输出 C++ 中【英文标题】:Compositions and Aggregation didn't showed up in the output C++ 【发布时间】:2021-08-13 15:12:37 【问题描述】:这是我为测试编写的程序(别担心,它已经结束了)。我按照问题的要求实现了组合和聚合。但是,我没有得到我想要的输出。
这里是代码
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
class Name
private:
string firstName, lastName;
public:
Name(string fN, string lN)
fN = firstName;
lN = lastName;
string getFullName()
string space = " ";
string full;
firstName.append(space);
full = firstName.append(lastName);
return full;
;
class Product
private:
string name, category;
double price;
int quantity;
public:
Product()
name = " ";
category = " ";
price = 0;
quantity = 0;
Product(string n, string c, double p)
name = n;
category = c;
price = p;
string getName()
return name;
string getCategory()
return category;
double getPrice()
return price;
int getQuantity()
return quantity;
void setQuantity(int q)
quantity = q;
;
class Customer
private:
string address;
int numProduct;
Product *product;
public:
Name name;
Customer(string fn, string ln, string add) : name(fn, ln)
address = add;
numProduct = 0;
Product **ptr = new Product*[4];
void buy(Product p, int num)
int i=0;
if (i<4)
num = numProduct;
p.setQuantity(num);
i++;
//p[i].setQuantity(num);
else
cout << "Sorry!! You already reached the maximum number of products purchased." << endl;
void print()
double total=0;
cout << left << setw(7) << "Name" << ": " << name.getFullName() << endl;
cout << "Address: " << address << endl;
cout << "Number of products purchased: 4" << endl;
cout << left;
cout << setw(4) << "No" << setw(15) << "Product Name" << setw(10) << "Category"
<< setw(10) << "Quantity" << setw(20) << "Unit Price (RM)" << setw(15) << "Amount (RM)" << endl;
for (int i=0; i<4; i++)
cout << left;
cout << fixed << setprecision(2);
cout << setw(4) << i+1 << setw(15) << product[i].getName() << setw(15) << product[i].getCategory()
<< setw(10) << product[i].getQuantity() << setw(20) << product[i].getPrice() << setw(15) <<
product[i].getPrice()*product[i].getQuantity() << endl;
total += product[i].getPrice()*product[i].getQuantity();
cout << fixed << setprecision(2) << "Total price = " << total;
;
int main()
Customer cust("Amir", "Jalil", "Masai, Johor");
Product p1("Jacob", "Biscuit", 14.8);
Product p2("Twister", "Drink", 7.5);
Product p3("Ayamas", "Nugget", 18.4);
Product p4("Oreo", "Biscuit", 3.8);
cust.buy(p4, 5);
cust.buy(p2, 4);
cust.buy(p3, 2);
cust.buy(p1, 3);
cust.print();
return 0;
这是我应该得到的输出:
但是,这是我得到的输出:
我知道Customer
课程出了问题,但我不知道如何解决。如果需要,以下是课程说明。
【问题讨论】:
【参考方案1】:Name(string fN, string lN)
fN = firstName;
lN = lastName;
等效的构造函数错误。
名字=fN; 姓氏=lN;
在这种情况下,fN 和 lN 正在获取垃圾值。
【讨论】:
天哪,非常感谢您指出这一点。如此粗心的错误。输出已显示名称,但尚未显示产品列表。不过,再次感谢您。 @flyhigh 也是二维指针数组的错误定义。检查link【参考方案2】:Product **ptr = new Product*[4];
设置一个局部变量。它不会为您的对象准备任何存储in。并且该变量立即被丢弃。你可能想要这样的东西:
product = new Product[4]; // <-- EDIT
注释掉的那一行:
//p[i].setQuantity(num);
尝试写入特定产品。但是,按原样,您的代码只是修改了按值传递的产品。这也丢弃了更改。你可能想要:
product[i].setQuantity(num); // <-- EDIT
您需要以较小的步骤解决此问题。
【讨论】:
没有数组,如何按照问题中的说明将 Product 指针分配给 Product 对象数组?或者我应该在构造函数之外声明它? 查看编辑。但是,请从这里开始,尝试理解这个和其他答案。不要马上问下一件事:-) 啊哈,现在我明白了。会努力的。 **ptr 对我来说是一个新事物,所以它有点混乱。感谢您的帮助!以上是关于组合和聚合没有出现在输出 C++ 中的主要内容,如果未能解决你的问题,请参考以下文章
编译时的垃圾和输出 C++ (Atom/QtCreator)
pandas使用groupby函数进行分组聚合并使用agg函数将每个分组特定变量对应的多个内容组合到一起输出(merging content within a specific column of g