cpp代码 char *getname() const;是什么意思?
时间: 2024-03-31 13:36:21 浏览: 100
这是一个函数声明,其中 `const` 修饰了函数,在类中声明的函数加上 `const` 后被称为常成员函数,表示该函数不会修改类中的任何成员变量。
函数的返回值类型是 `char*`,表示返回一个指向字符数组的指针。函数名为 `getname`,没有参数。
因此,这个函数声明表示一个常成员函数,它返回一个指向字符数组的指针,函数名称为 `getname`,没有参数。常成员函数可以访问类中的数据成员,但是不能修改它们,这个函数的声明中的 `const` 可以让编译器检查该函数是否修改了数据成员。
相关问题
#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; }适当改进
这段代码有一些可以改进的地方,以下是一种可能的改进方案:
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;
}
```
class Student { private: int Id,score; char name[9]; public: Student( int id=10000,const char* n=NULL,int s=0 ); int GetId(); char* GetName(); int GetScore(); void Set(int id = 99999, const char* n = "NONAME", int s = 100); void Show(); }; Student::Student( int id,const char* n,int s ) { Id=id; score=s; strcpy(name,n); } int Student::GetId() { return Id; } int Student::GetScore() { return score; } char* Student::GetName() { return name; } void Student::Set( int id,const char* n,int score ) { Id=id; score=s; strcpy(name,n); } void Student::Show() { cout<<Id<<"-"<<name<<"-"<<score<<endl;}将上述代码进行修改,成员数据不变
修改后的代码如下:
```cpp
class Student {
private:
int Id, score;
char name[9];
public:
Student(int id = 10000, const char* n = NULL, int s = 0);
int GetId() const;
const char* GetName() const;
int GetScore() const;
void Set(int id = 99999, const char* n = "NONAME", int s = 100);
void Show() const;
};
Student::Student(int id, const char* n, int s) {
Id = id;
score = s;
if (n == NULL) {
strcpy(name, "NONAME");
} else {
strncpy(name, n, 8); // 限制拷贝长度为8
name[8] = '\0'; // 添加字符串结尾标识符
}
}
int Student::GetId() const {
return Id;
}
int Student::GetScore() const {
return score;
}
const char* Student::GetName() const {
return name;
}
void Student::Set(int id, const char* n, int score) {
Id = id;
this->score = score;
if (n == NULL) {
strcpy(name, "NONAME");
} else {
strncpy(name, n, 8);
name[8] = '\0';
}
}
void Student::Show() const {
cout << Id << "-" << name << "-" << score << endl;
}
```
主要的修改有:
1. 在成员函数的声明和定义中增加 const 修饰符,表示这些函数不会修改类的成员数据。
2. 在构造函数和 Set 函数中增加对传入字符串指针为 NULL 的处理,防止 strcpy 函数出现错误。
3. 在构造函数和 Set 函数中,使用 strncpy 函数限制字符串的拷贝长度,并添加字符串结尾的标识符。
阅读全文