C++ 类定义语法错误分析及修正
C++ 类定义语法错误分析及修正
本文将分析以下 C++ 类定义中的六处语法错误,并提供修正方法。
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; }
};
错误分析及修正
-
A 类构造函数中的 cnt 计数应该在类外进行初始化,不能在构造函数中赋值。
修正: 静态成员变量的定义和初始化应该在类外进行。
class A { // ... }; static int A::cnt; A(int _x) { x = _x; cnt++; } -
A 类拷贝构造函数中应该也要对 cnt 进行自增操作。
修正: 在拷贝构造函数中添加 cnt 自增操作。
A(const A& a) :x(a.x) { cnt++; } -
B 类构造函数中应该使用成员初始化列表来初始化 a 对象。
修正: 在 B 类构造函数中使用成员初始化列表。
B(int _x, int _v) : a(_x), v(_v) {} -
B 类中 setX 方法中的 const 是多余的,应该去掉。
修正: 删除 setX 方法中的 const 修饰符。
void setX(int _x) { a.set(_x); }
通过以上分析和修正,我们可以得到一个语法正确的 C++ 类定义,并更好地理解 C++ 类定义的语法规则。
原文地址: https://www.cveoy.top/t/topic/oj9v 著作权归作者所有。请勿转载和采集!