组合和聚合没有出现在输出 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++两个数组合并成一个新数组

C++:关联、聚合和组合

编译时的垃圾和输出 C++ (Atom/QtCreator)

pandas使用groupby函数进行分组聚合并使用agg函数将每个分组特定变量对应的多个内容组合到一起输出(merging content within a specific column of g

C++信奥赛题目——第一个只出现一次的值

如何从聚合 CoreAudio 设备中排除输入或输出通道?