您好,我正在编写简单的类,然后是Web中的示例代码。 此代码工作正常,没有错误。
class Shape{
protected:
int width,height;
public:
Shape(int a = 0, int b=0)
{
width = a;
height = b;
}
};
class regSquare: public Shape{
public:
regSquare( int a=0, int b=0)
{
Shape(a, b);
}
};
但是当我改变我的只有一个构造函数的参数,如
class Shape{
protected:
int width;
public:
Shape(int a = 0)
{
width = a;
}
};
class regSquare: public Shape{
public:
regSquare(int a = 0)
{
Shape(a);
}
};
这种按摩发生错误
'错误:声明'a'遮蔽参数'
我不知道我的代码有什么问题
答案 0 :(得分:6)
尽管如此,很可能两个版本都没有你想要的版本!代码
regSquare(int a = 0, int b = 0) {
Shape(a, b);
}
不初始化Shape
对象的regSquare
子对象!相反,它会创建一个Shape
类型的临时对象,其参数为a
和b
。一个参数版本做了类似的事情:
Shape(a);
定义名为Shape
的{{1}}类型的默认构造对象。您可能打算使用初始化列表将构造函数参数传递给a
子对象,例如:
Shape
或
reqSquare(int a = 0, int b = 0)
: Shape(a, b) {
}
答案 1 :(得分:0)
因为在单项争论中,编译器将其用作对象名称并创建对象,因此会产生冲突。