Arrays 在c++;
嗨,我正在做一个项目,在这个项目中,我从一个文件中访问信息,然后将其放入一个对象数组中,然后从菜单的选项中操作对象中的数据。我目前遇到的问题是,菜单中的一个选项是向对象添加新元素。该项目声明我必须使用一个对象数组,这样我就不能只使用一个向量我要将数组放入的类中调整大小,它使用一个临时动态数组作为对象,然后删除原始数组 这是这门课的样子Arrays 在c++;,arrays,visual-c++,object,dynamic,Arrays,Visual C++,Object,Dynamic,嗨,我正在做一个项目,在这个项目中,我从一个文件中访问信息,然后将其放入一个对象数组中,然后从菜单的选项中操作对象中的数据。我目前遇到的问题是,菜单中的一个选项是向对象添加新元素。该项目声明我必须使用一个对象数组,这样我就不能只使用一个向量我要将数组放入的类中调整大小,它使用一个临时动态数组作为对象,然后删除原始数组 这是这门课的样子 class Info { private: string name; double money; public: Info(){ na
class Info
{
private:
string name;
double money;
public:
Info(){
name="";
money=0;
}
void Setname(string n){
name=n;
}
void Setmoney(double m){
money=m;
}
string GetName()const{
return name;
}
double GetMoney()const{
return money;
}
};
现在这只是一个类的样本,实际的类有方程来改变money变量,但是为了这个问题的目的,这就是所需要的。这里是我遇到问题的函数
void Addinfo(Info in [], int & size){
string newname;
double newmoney;
cout<<"What name are you going to use?"<<endl;
cin>>newname;
cout<<"Now How much money do you have currently"<<endl;
cin>>newmoney;
Info *temp= new Info[size+1];
for(int index=0; index<size;index++){
temp[index].Setname(in[index].GetName());
temp[index].Setmoney(in[index].GetMoney());
}
delete []in;
temp[size].Setname(newname);
temp[size].Setmoney(newmoney);
in=temp;
size=size+1;
}
void Addinfo(信息格式为[],整数和大小){
字符串newname;
双倍新币;
当您有一个类型为valueName[]数组参数,然后只需将数组参数的地址传递给函数。调用函数就拥有该数组的所有权。除了函数签名之外,您还必须考虑调用方和调用函数之间的一个约定,该函数定义指针传递的数据的所有权。
您的函数AddInfo
获取指针传递的数组,调用函数希望在函数调用后数据可用。因此,当您在中删除[]时,函数违反了约定
当您使用in=temp;
分配新值时,您的函数将中的参数用作(局部)变量。这是合法的。但您不能期望更改的局部变量对调用者有任何影响。使用当前函数签名,可以通过以下方式调用函数:
Info infos[5];
Addinfo(&info[3], 2);
显然,修改&info[3]
毫无意义。当合同允许向数组中添加一些数据时,您需要一个允许更改指针的签名。例如:
void Addinfo(Info*& in, int& size, string newname, double newmoney)
{
Info *temp= new Info[size+1];
for(int index=0; index<size;index++){
temp[index].Setname(in[index].GetName());
temp[index].Setmoney(in[index].GetMoney());
}
temp[size].Setname(newname);
temp[size].Setmoney(newmoney);
delete []in;
in = temp;
size=size+1;
}
void Addinfo(Info*& in, int& size)
{
string newname;
double newmoney;
// input data
cout<<"What name are you going to use?"<<endl;
cin>>newname;
cout<<"Now How much money do you have currently"<<endl;
cin>>newmoney;
// TODO: data validation.
// add data to array
Addinfo(in, size, newname, newmoney);
}
void Addinfo(Info*&in,int&size,string newname,double newmoney)
{
信息*临时=新信息[大小+1];
对于(int index=0;indexi)如果要将in
设置为临时数组,可能应该将其作为指针的引用传入。您的in=temp
赋值现在没有任何有用的效果,因为in
正在按值传入