这是一个商店管理系统。 其中项目的名称,价格和数量将由用户输入,并且应根据项目的价格从低到高给出排序的输出。 我实现了整数中使用的排序方法..但是对象... 我在这做错了什么? 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;}
答案 0 :(得分:0)
copie
函数未按预期工作,因为b
和c
是该函数中的局部变量,因此修改不会影响。而不是使用引用变量来捕获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()
工作。)