Привет, я кодировал простой класс, за которым следовал пример кода в сети.
Этот код работает без ошибок.
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);
}
};
это происходит ошибка с этим массажем
‘error: объявление `a’ затеняет параметр ‘
Я понятия не имею, что не так с моим кодом
Скорее всего, ни одна из версий не делает то, что вы хотите! Код
regSquare(int a = 0, int b = 0) {
Shape(a, b);
}
Есть ли не инициализировать Shape
подобъект вашего regSquare
объект! Вместо этого он создает временный объект типа Shape
с параметрами a
а также b
, Версия с одним параметром делает нечто подобное:
Shape(a);
определяет созданный по умолчанию объект типа Shape
называется a
, Вы, вероятно, намеревались использовать список инициализатора для передачи аргументов конструктора Shape
подобъект, например:
reqSquare(int a = 0, int b = 0)
: Shape(a, b) {
}
или же
regSquare(int a = 0)
: Shape(a) {
}
Других решений пока нет …