class Test { private: char a; const char b; public: Test(char c) { a=c; b=c; } void f(char aa) const{ a=aa; } void g(char bb) { b=bb; } char h()const { return a; } };指出该段代码的错误并改正
时间: 2024-03-24 17:37:13 浏览: 96
这段代码存在以下错误:
1. const char b; 没有被初始化,而且在构造函数内部也没有初始化它,这是一个错误。因为 const 类型的变量必须在声明时被初始化,否则会导致编译错误。
2. 在 f(char aa) const 中,函数声明为 const,表示该函数不会修改类的成员变量,但是 a=aa; 明显是对成员变量 a 进行了修改,这也是一个错误。
3. 在 g(char bb) 中,函数没有声明为 const,但是 b=bb; 明显是在修改 const 类型的变量 b,这也是一个错误。
改正后的代码如下:
```
class Test {
private:
char a;
const char* b;
public:
Test(char c) : a(c), b(nullptr) {
}
void f(char aa) {
a = aa;
}
void g(const char* bb) {
b = bb;
}
char h() const {
return a;
}
};
```
改正后的代码中:
1. const char b; 被改为 const char* b;,因为 const 类型的变量必须在声明时被初始化,而 const char* 变量可以在构造函数中初始化。
2. f(char aa) const 中的 const 被移除,因为 a=aa; 明显是对成员变量 a 进行了修改,不符合 const 函数的定义。
3. g(char bb) 被改为 g(const char* bb),因为 b 是 const char* 类型的变量,应该使用指针参数来进行修改。
4. 构造函数中初始化了 a 和 b。
阅读全文