скрывает параметр, когда один параметр в конструкторе

Привет, я кодировал простой класс, за которым следовал пример кода в сети.
Этот код работает без ошибок.

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’ затеняет параметр ‘

Я понятия не имею, что не так с моим кодом

0

Решение

Скорее всего, ни одна из версий не делает то, что вы хотите! Код

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) {
}
6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]