下面类定义中有六处语法错误,请指出并改正: class A { private: static int cnt; int x; public: A(int _x):cnt(0) { x = _x; cnt++; } A(const A& a) :x(a.x) { cnt++; } ~A() { cnt--; } int get() const{ return x; } void set(int _x) { x = _x; } static int count() const { return cnt; } }; class B { private: A a; int v; public: B(int _x, int _v) { a = A(_x); v = _v; } int getX() const { return a.x; } int getV() const { return v; } void setX(int _x) const { a.set(_x); } void setV(int _v) { v = _v; } };
时间: 2024-01-22 18:02:18 浏览: 64
修改后的类定义如下:
```
class A {
private:
static int cnt;
int x;
public:
A(int _x) : x(_x) { cnt++; }
A(const A& a) : x(a.x) { cnt++; }
~A() { cnt--; }
int get() const { return x; }
void set(int _x) { x = _x; }
static int count() { return cnt; }
};
class B {
private:
A a;
int v;
public:
B(int _x, int _v) : a(_x), v(_v) {}
int getX() const { return a.get(); }
int getV() const { return v; }
void setX(int _x) { a.set(_x); }
void setV(int _v) { v = _v; }
};
```
修改说明:
1. 类 A 的构造函数中,不应该在初始化列表中初始化 cnt,应该在构造函数体内进行初始化。
2. 类 B 的构造函数中,应该在初始化列表中调用类 A 的构造函数。
3. setX 方法应该是非 const 的,因为它会修改类 A 的成员变量。
4. count 方法应该是非 const 的,因为它会修改类 A 的静态成员变量 cnt。
相关问题
1. 下面类定义中有六处语法错误,请指出并改正:class A i private: static int cnt; int X; public: Alint_ x):cnt(0) i x = _x; cnt+t; 3 A(const A& a) :x(a.x) i cnt+t; f ~A() i cnt--; f int get() consti return x; f void setlint _x) ix=_x;f static int count() const i return cnt; f 3; class B i private: A a; int v; public: B(int_ x, int _v) { a = A(_x);v =_v; }int getX() const i return a.x; f int getV(O) const i return v; f void setX(int_ _x) const i a.set(_x); fvoid setV(int. _v) iv= _v; 3 3;
改正后的类定义如下:
```cpp
class A {
private:
static int cnt;
int x;
public:
A(int _x) : x(_x) { cnt++; }
A(const A& a) : x(a.x) { cnt++; }
~A() { cnt--; }
int get() const { return x; }
void set(int _x) { x = _x; }
static int count() { return cnt; }
};
int A::cnt = 0;
class B {
private:
A a;
int v;
public:
B(int x, int _v) : a(x), v(_v) {}
int getX() const { return a.get(); }
int getV() const { return v; }
void setX(int _x) { a.set(_x); }
void setV(int _v) { v = _v; }
};
```
修改内容如下:
1. 类A的构造函数参数列表中应该是 `int _x` 而不是 `Alint_ x`。
2. 类A构造函数中的 `x = _x; cnt+t;` 应该改为 `x = _x; cnt++;`。
3. 类A拷贝构造函数中的 `cnt+t;` 应该改为 `cnt++;`。
4. 类A析构函数中的 `cnt--; f` 应该改为 `cnt--;`。
5. 类A的成员函数 `get()` 和 `count()` 不能声明为 `const`。
6. 类B成员函数 `setX()` 应该去掉 `const` 限定符。
1. 下面类定义中有六处语法错误,请指出并改正:class A [ private: static int cnt; intх; public: A(int_ x):cnt(0)[x=. _х; cnt++;] A(const A& а) :х(а.x) [ cnt++;] ~A() l cnt--;] int get() const( return х; ] void set(int_ x)[xх=. _x;] static int count() const [ return cnt; ] ]; class B[ private: A a; int V; public: B(int_ x,int. _v) (а=A(_ x);v=. _v;]int getX() const [ return a.х; ] int getV() const [ return v; ] . void setX(int_ х) const [ a.set(_ х);]void setV(int. _v) [v= _v;]
修改后的类定义如下:
```cpp
class A {
private:
static int cnt;
int x;
public:
A(int x) : x(x) { cnt++; }
A(const A& a) : x(a.x) { cnt++; }
~A() { cnt--; }
int get() const { return x; }
void set(int x) { this->x = x; }
static int count() { return cnt; }
};
int A::cnt = 0;
class B {
private:
A a;
int v;
public:
B(int x, int v) : a(x), v(v) {}
int getX() const { return a.get(); }
int getV() const { return v; }
void setX(int x) { a.set(x); }
void setV(int v) { this->v = v; }
};
```
修改内容如下:
1. 类A的构造函数中的 `cnt++;` 应该放在 `x = _x;` 语句后面。
2. 类A拷贝构造函数中的 `cnt++;` 应该放在 `x(a.x)` 语句后面。
3. 类A析构函数中的 `cnt--;` 后面应该删除多余的 `]` 符号。
4. 类A的成员函数 `get()` 和 `count()` 返回类型后面应该去掉多余的空格。
5. 类B成员函数 `setX()` 应该去掉 `const` 限定符。
6. 类B成员函数 `setV()` 中的变量名应该改为 `v`,而不是 ` _v`。
阅读全文