首页 > 解决方案 > 变化没有反映在参考文献中

问题描述

我正在做一项任务,我们应该编写一个非常基本的公司场景来管理他们的产品。因此,当输入新产品时,我们应该检查它是否已经存在(我们应该通过将产品名称与输入的产品名称进行比较来做到这一点;空产品的名称为空字符串),如果我们没有找到它,那么我们应该将它添加到公司的产品列表中(最多只能有 3 个产品,所以我正在单独检查每个产品)。

class Store : public Product {
public:
        ...
        Product& return_product_1() {return product1;}
        Product& return_product_2() {return product2;}
        Product& return_product_3() {return product3;}

private:
        Product product1;
        Product product2;
        Product product3;
        ...
        
};

所以我认为我可以使用一个函数来返回对当前为空的对象的引用(由于所有三个 Product 对象都单独存储在类中,因此添加或删除对象只是向用户询问其详细信息或将数据成员分别设置为 NULL),因此我创建了以下函数来查找特定Product对象。我传递了一个字符串n来检查是否有任何Product对象具有相同的名称,n并且我还传递了一个空Product对象,以便我可以p与返回的对象同义,Product因为它们都是引用。(我这样做是因为我想返回正确的Product对象和布尔值。我本来可以std::pair同时返回它们,但我不想这样做。

bool StarberksInterface::search(string n, Product& p) {     

        if(store.return_product_1().product_name() == n) {
                p = store.return_product_1();
                return true;
        }
        else if(store.return_product_2().product_name() == n){
                p = store.return_product_2();
                return true;
        }
        else if(store.return_product_3().product_name() == n) {
                p = store.return_product_3();
                return true;
        }
        else return false;    // The function returns true when a Product object which the same name as the first parameter is found
}

product_name定义为

std::string product_name() const {return name;}

其中是类类型的name数据成员。std::stringProduct

使用函数search(string, Product&)调用调用该函数search("", p);,其中我传递一个空字符串以检查当前为空的产品,并且 p 被声明为Product p;.

我声明了另一个Productobject Product temp = input();input声明为where Product input();,它向用户询问有关产品的信息并返回一个Product对象。我已经为Product类重载了赋值运算符。

然后我写

p = temp;

现在我在想,sincereturn_product_1会返回一个引用,p并被赋值为return_product_1,因此pand product1应该是同义词(假设search函数最初发现product1确实有一个空字符串作为名称)。对 所做的任何更改p都应反映在 中product1,但似乎并非如此。我希望 的详细信息temp也应该分配给,product1因为我分配tempp. 我的代码或者我的逻辑有问题吗?任何帮助表示赞赏。谢谢你。

标签: c++reference

解决方案


推荐阅读