C++无法更改数组成员

标签 c++ arrays

我真的陷入了以下问题:

2 类:

class Article
{
    char* _code;
    char* _name;
    double _price;

    int _quantity; 

public:

    Article(char* code = "code", char * name = "name", double price = 0){
        setCode(code);
        setName(name);

        _price = price;
        _quantity = 0;
    }


    Article(Article & a){
        setCode(a._code);
        setName(a._name);

        _price = a._price;
        _quantity = a._quantity;
    }


    ~Article(){
        delete[] _code; _code = nullptr;
        delete[] _name; _name = nullptr;

    }

    /*******SETTERS********/

    void setCode(char* code){
        int vel = strlen(code);
        _code = new char[vel + 1];

        strncpy_s(_code, vel + 1, code, _TRUNCATE);
    }

    void setName(char* name){
        int vel = strlen(name);
        _name = new char[vel + 1];

        strncpy_s(_name, vel + 1, name, _TRUNCATE);
    }

    void setPrice(double c){ _price = c; }

    /*******GETTERS********/
    int getquantity(){ return _quantity; }
    double getprice(){ return _price; }


    //operator = 
    Article operator = (Article& a){
        setName(a._name);
        setCode(a._code);
        _price = a._price;
        _quantity = a._quantity;

        return *this;
    }


    //operator-= decrease qnty for passed value.

    bool operator-=(int v){
        if (_quantity > v)
        {
            _quantity = _quantity - v;
            return true;
        }
        cout << "Operacija nije moguca, stanje je manje nego vrijednsot za koju se umanjuje";
        return false;
    }

    // operator ++ increase Qnty for 1.
    Article operator++(int){

        //Article A(_code, _name, _price);
        this->_quantity++;
        return *this;

    }

    //Preklopiti operator -- decrease value for 1.
    Article operator--(){

        if (_quantity >= 1) 
        {
            _quantity--;
        }

        return *this;

    }

    //compare articles based on code.

    bool operator==(Article & a){
        if (strncmp(_code, a._code, strlen(_code)) == 0)
        {
            return true;
        }
        return false;
    }

    //operator <<

    friend ostream & operator<<(ostream & COUT, Article & a);


};

ostream & operator<<(ostream & COUT, Article & a){

    COUT << "code: " << a._code << endl << "name: " << a._name << endl << "price: " << a._price << ",  Qnty: " << a._quantity << "\n ----------------------- \n\n";
    return COUT;

}

class Item
{
    Article _Article;
    int* _quantity;
public:

    Item(Article & a, int quantity) :_Article(a){

        _quantity = new int(quantity);


    }

    Item() :_Article("StavkaR", "nameR", 0){

        _quantity = new int(0);


    }

    Item(Item& s) :_Article(s._Article){

        _quantity = new int(*s._quantity);

    }


    ~Item(){
        delete _quantity; _quantity = nullptr;
    }


    int getquantity(){ return *_quantity; }
    void setquantity(int v) { *_quantity += v; }

    Article getArticle() { return _Article; }

    friend ostream & operator << (ostream & COUT, Item & obj);

};

ostream & operator << (ostream & COUT, Item & obj){
    COUT << "quantity: " << *obj._quantity << endl << obj._Article;
    return COUT;
}

第一类是带有构造函数、析构函数和重载运算符的文章,第二类 ITEM 很简单,它包含文章和数量。

对于主要的测试,我有以下代码:

    Article a;
    Article b("code", "name", 1.5);
    Article c(b);

    cout << a;
    cout << b;
    c++;
    c++;
    c.setPrice(10);
    cout << c;


    cout << "\n ************************************** \n";



    Item _stavke[100];
    for (size_t i = 0; i < 3; i++)
    {
        _stavke[i].getArticle().setPrice(100);
        cout << _stavke[i];
        cout << "\n \t\t\t ---- \n";
    }

代码的第一部分我测试了 Article 类和一些重载运算符,它工作正常但第二部分我有 Item _stavke[100]; 数组我可以列出数组的成员 - 没问题但是基本上代码不接受任何调用的更改 _stavke[i].getArticle().setPrice(100); 似乎没有做任何事情......

谁能指出我哪里出错了以及为什么我不能更改数组成员?

提前致谢

最佳答案

您的 getArticle() 调用按值返回 _Article。也就是文章的拷贝。您的 setPrice() 是在拷贝上调用的,因此它不会反射(reflect)在原始项目的文章中,该文章保持不变。

关于C++无法更改数组成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33489012/

相关文章:

javascript - 如果我的 props 在 React 中发生变化,如何更新状态以强制重新渲染?

c - 很长的整数列表的数组

c# - C# 中的委托(delegate)数组

c++ - 遍历数组时出现段错误

c++ - 创建具有专业外观(和行为!)的表单设计器

python - 将 Eigen 库与 cppyy 一起使用

c - 如何将结构数组的属性作为参数发送给 C 中的函数?

javascript - 在javascript中将多行数字字符串转换为双数组

c++ - 如何在 Qimage 中设置像素并保存更改

python - 将 Python 转换为 C++ - lambda 中的索引