Re: конструкторы
Добавлено: 24 сен 2010, 21:58
Почему вызовы delete располагаются в методе show? Они должны быть в деструкторе! При текущем положении дел метод show вызвать больше одного раза нельзя, а это неправильно.
Код: Выделить всё
class bank
{
private:
char *bank_name;
char **name;
int **value;
int **salary;
public:
bank(){}
void add(int );
void show(int );
};
int vc;
void bank::add(int n)
{
bank_name=new char[33];
cout<<"input bank_name\n"<<endl;
cin>>bank_name;
char str[55];
name=new char *[n];
value=new int *[n];
salary=new int *[n];
for(int i=0;i<n;i++)
{
system("cls");
cout<<i<<":iput name:\n"<<endl;
cin>>str;
name[i]=new char[strlen(str)+1];
strcpy(name[i],str);
cout<<"input amount of values:";
cin>>vc;
value[i]=new int[vc];
salary[i]=new int[vc];
for(int j=0;j<vc;j++)
{
cout<<"values:"<<j<<endl;
cin>>value[i][j];
cout<<"salary:"<<endl;
cin>>salary[i][j];
}
}
system("cls");
}
void bank::show(int n)
{
cout<<bank_name<<endl;
for(int i=0;i<n;i++)
{
cout<<name[i]<<"\n";
for(int j=0;j<vc;j++)
{
cout<<value[i][j]<<" "<<salary[i][j]<<endl;
}
}
}
void main()
{
char **name='\0',*bank_name='\0';int *value=0;
int n;
bank object;
cout<<" size (n):"<<endl;
cin>>n;
bank obj;
obj.add(n);
obj.show(n);
system("PAUSE");
delete []name;
delete []bank_name;
delete []value;
}
Код: Выделить всё
class bank
{
private:
char *bank_name;
char **name;
int **value;
int **salary;
public:
int n;
bank(){}
~bank();
void add( );
void show( );
};
int vc;
void bank::add()
{
bank_name=new char[33];
cout<<"input bank_name\n"<<endl;
cin>>bank_name;
char str[55];
name=new char *[n];
value=new int *[n];
salary=new int *[n];
for(int i=0;i<n;i++)
{
system("cls");
cout<<i<<":iput name:\n"<<endl;
cin>>str;
name[i]=new char[strlen(str)+1];
strcpy(name[i],str);
cout<<"input amount of values:";
cin>>vc;
value[i]=new int[vc];
salary[i]=new int[vc];
for(int j=0;j<vc;j++)
{
cout<<"values:"<<j<<endl;
cin>>value[i][j];
cout<<"salary:"<<endl;
cin>>salary[i][j];
}
}
system("cls");
}
void bank::show()
{
cout<<bank_name<<endl;
for(int i=0;i<n;i++)
{
cout<<name[i]<<"\n";
for(int j=0;j<vc;j++)
{
cout<<value[i][j]<<" "<<salary[i][j]<<endl;
}
}
}
bank::~bank()
{
delete []name;
delete []bank_name;
delete []value;
}
void main()
{
int n;
bank object;
cout<<" size (n):"<<endl;
cin>>n;
bank obj;
obj.add();
obj.show();
system("PAUSE");
}
Код: Выделить всё
class bank
{
private:
char *bank_name;
char **name;
int **value;
int **salary;
public:
int n;
bank();
~bank();
void add( );
void show( );
void setsize();
};
int vc;
bank::bank()
{
n=0;
int **value=0,**salary=0;
char **name='\0',*bank_name='\0';
}
void bank::setsize()
{
cout<<" size (n):"<<endl;
cin>>n;
}
void bank::add()
{
bank_name=new char[33];
cout<<"input bank_name\n"<<endl;
cin>>bank_name;
char str[55];
name=new char *[n];
value=new int *[n];
salary=new int *[n];
for(int i=0;i<n;i++)
{
system("cls");
cout<<i<<":iput name:\n"<<endl;
cin>>str;
name[i]=new char[strlen(str)+1];
strcpy(name[i],str);
cout<<"input amount of values:";
cin>>vc;
value[i]=new int[vc];
salary[i]=new int[vc];
for(int j=0;j<vc;j++)
{
cout<<"values:"<<j<<endl;
cin>>value[i][j];
cout<<"salary:"<<endl;
cin>>salary[i][j];
}
}
system("cls");
}
void bank::show()
{
cout<<bank_name<<endl;
for(int i=0;i<n;i++)
{
cout<<name[i]<<"\n";
for(int j=0;j<vc;j++)
{
cout<<value[i][j]<<" "<<salary[i][j]<<endl;
}
}
}
bank::~bank()
{
delete []name;
delete []bank_name;
delete []value;
delete []salary;
}
void main()
{
bank obj;
obj.setsize();
obj.add();
obj.show();
system("PAUSE");
}