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,char n[9],int score ) { Id=id; score=s; strcpy(name,n); } void Student::Show() { cout<<Id<<"-"<<name<<"-"<<score<<endl;}指出问题
时间: 2024-03-23 12:40:05 浏览: 41
(const) char 转CString 详解(字符串类型转换详解,不断补充)
这段代码存在以下几个问题:
1. 在类的私有成员中,`name` 应该是一个字符指针类型,而不是一个字符指针数组类型,因为一个学生只有一个姓名。应该将 `char* name[9]` 改为 `char* name`。
2. 在成员函数 `GetName()` 中,应该返回一个字符指针类型,而不是一个字符类型。应该将 `char` 改为 `char*`。
3. 在成员函数 `Set()` 中,字符数组类型的形参无法指定默认值,需要改为使用字符指针类型的形参。另外,在该函数中,第二个参数 `char n[9]` 应该改为 `const char* n`,因为该函数不应该修改传入的字符串。
4. 在成员函数 `Show()` 中,应该将 `name` 输出为字符串而不是字符指针。可以使用 `cout << name` 来输出字符串。
修正后的代码如下:
```
class Student {
private:
int Id, score;
char* name;
public:
Student(int id = 10000, const char* n = nullptr, 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;
name = new char[strlen(n) + 1];
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 = score;
delete[] name;
name = new char[strlen(n) + 1];
strcpy(name, n);
}
void Student::Show() {
cout << Id << "-" << name << "-" << score << endl;
}
```
阅读全文