基于这些对象中的特定数据交换c ++中的对象?

时间:2018-01-18 16:52:37

标签: c++ class

这是一个商店管理系统。 其中项目的名称,价格和数量将由用户输入,并且应根据项目的价格从低到高给出排序的输出。 我实现了整数中使用的排序方法..但是对象... 我在这做错了什么? p.s:我是初学者,也是stackoverflow的新手

#include<iostream>
using namespace std;
class item{
        public:
            string name;
            int price;
            int quan;

            string getname(){
                cin>>name;;
                return name;}
            int getprice(){
                cin>>price;
                return price;}
            int getquan(){
                cin>>quan;
                return quan;
                }
            void display(){
                cout<<"\nname of item: "<<name;
                cout<<"\nprice: "<<price;
                cout<<"\nquantity: "<<quan;
                }
            void copie(item b ,item c){

                b.name=c.name;
                b.price=c.price;
                b.quan=c.quan;
                }
};

int main(){
    int n;
    cout<<"Enter number of items: ";
    cin>>n;
    item a[n];
    for(int i=0;i<n;i++){
        cout<<"\nenter name ";
        a[i].getname();
        cout<<"enter price ";
        a[i].getprice();
        cout<<"enter quantity ";
        a[i].getquan();

    }

    for(int i=0;i<n;i++){
        a[i].display();

    }
//swapping begins
     for(int i=0;i<n;i++){//cout<<"in loop 1";
        for(int j=0;j<n-1;j++){//cout<<"in loop 2";
                item temp,temp1;
                //cout<<"temp,temp1 initalized";
                int x,y;
                x=a[j].price;
                y=a[j+1].price;
                //cout<<"\nname "<<a[j].name<<"\nx= "<<x<<"\nname "<<a[j+1].name<<"\n"<<"y= "<<y;
            if(x>y){//cout<<"comapriosn";
               //is swapping happening here?
               temp.copie(temp1,a[j]);
               cout<<"\n"<<temp1.price;
               temp.copie(a[j],a[j+1]);
               temp.copie(a[j+1],temp1);
               //cout<<"\nname "<<a[j].name<<"\nprice "<<a[j].price;

            }
        }
    }

    for(int i=0;i<n;i++){
        a[i].display();
        }
        //somecode


return 0;}

2 个答案:

答案 0 :(得分:0)

copie函数未按预期工作,因为bc是该函数中的局部变量,因此修改不会影响。而不是使用引用变量来捕获normal变量。

copie功能修改为

void copie(item &b ,item &c){ /** catch with reference variable */

                        b.name=c.name;
                        b.price=c.price;
                        b.quan=c.quan;
                }

通过引用变量,您可以保存内存,因为b( in item &b)创建了no separate memory,它将使用{{ 1}}已分配给same memory

我实现了整数中使用的排序方法..但是对象 =&gt;你可以使用模板来获得适用于任何输入/数据类型的相同逻辑。

我希望它有所帮助。

答案 1 :(得分:0)

替换

       temp.copie(temp1,a[j]);
       cout<<"\n"<<temp1.price;
       temp.copie(a[j],a[j+1]);
       temp.copie(a[j+1],temp1);

       cout << endl << a[j].price;
       swap(a[j], a[j + 1]);

(你可能必须

#include <utility>

swap()工作。)