#include<iostream> #include<cstring> using namespace std; class Country { private: char name[40],capital[40]; int population; public: Country( const char* cou=NULL,const char* cap="NONE",int pop=0 ); const char* GetName ( ) const; const char* GetCapital ( ) const; int GetPopulation ( ) const ; void Set( const char* cou="Russia",const char* cap="Moscow",int pop=143000000 ); void Show(); }; Country::Country( const char* cou,const char* cap,int pop ) { strcpy(name,cou); strcpy(capital,cap); population=pop; } const char* Country::GetName ( ) const { return name; } const char* Country::GetCapital ( ) const { return capital; } int Country::GetPopulation ( ) const { return population; } void Country::Set( const char* cou,const char* cap,int pop ) { strcpy(name,cou); strcpy(capital,cap); population=pop; } void Country::Show( ) { cout<<name<<"-"<<capital<<"-"<<population<<endl; } int main() { Country c1; cout<<"Show object c1:"; cout<<c1.GetName()<<"-"<<c1.GetCapital()<<"-"<<c1.GetPopulation()<<endl; char name[40],capital[40]; int population; cin>>name>>capital>>population; Country c2(name,capital,population); cout<<"Show object c2:"; cout<<c2.GetName()<<"-"<<c2.GetCapital()<<"-"<<c2.GetPopulation()<<endl; cin>>name>>capital>>population; cout<<"Reset and Show object c1:"; c1.Set(name,capital,population); c1.Show(); cout<<"Reset and Show object c2:"; c2.Set(); c2.Show(); return 0; }适当改进
时间: 2024-03-30 11:38:24 浏览: 64
这段代码有一些可以改进的地方,以下是一种可能的改进方案:
1. 在构造函数和 Set() 函数中使用 strncpy() 函数来复制字符串,以防止缓冲区溢出。
2. 将默认参数的值从函数实现中移除,放到函数声明中。
3. 在 Show() 函数中使用 cout 输出时,可以使用成员函数来访问数据成员,而不是直接访问数据成员。
4. 在输入时,应该使用 getline() 函数来读取整行数据,而不是使用 >> 运算符,以防止输入的字符串长度超过缓冲区长度。
改进后的代码如下:
```cpp
#include<iostream>
#include<cstring>
using namespace std;
class Country {
private:
char name[40], capital[40];
int population;
public:
Country(const char* cou = nullptr, const char* cap = "NONE", int pop = 0);
const char* GetName() const;
const char* GetCapital() const;
int GetPopulation() const;
void Set(const char* cou = "Russia", const char* cap = "Moscow", int pop = 143000000);
void Show() const;
};
Country::Country(const char* cou, const char* cap, int pop) {
strncpy(name, cou, 39);
strncpy(capital, cap, 39);
population = pop;
}
const char* Country::GetName() const {
return name;
}
const char* Country::GetCapital() const {
return capital;
}
int Country::GetPopulation() const {
return population;
}
void Country::Set(const char* cou, const char* cap, int pop) {
strncpy(name, cou, 39);
strncpy(capital, cap, 39);
population = pop;
}
void Country::Show() const {
cout << GetName() << "-" << GetCapital() << "-" << GetPopulation() << endl;
}
int main() {
Country c1;
cout << "Show object c1:";
c1.Show();
char name[40], capital[40], line[100];
int population;
cin.getline(line, 100);
sscanf(line, "%s %s %d", name, capital, &population);
Country c2(name, capital, population);
cout << "Show object c2:";
c2.Show();
cin.getline(line, 100);
sscanf(line, "%s %s %d", name, capital, &population);
cout << "Reset and Show object c1:";
c1.Set(name, capital, population);
c1.Show();
cout << "Reset and Show object c2:";
c2.Set();
c2.Show();
return 0;
}
```
阅读全文