Smasher
08-02-2012, 22:12
Есть вопрос касающийся кода, который (почти) целиком лежит там (http://pastie.org/3336164).
Как видно, существует класс Becher и подкласс BecherMitAufdruck. В суперклассе я создал перегруженный оператор присваивания.
Becher& Becher::operator=(const Becher &b)
{
if (this != &b)
{
delete [] inhalt;
inhalt = strdupnew(b.inhalt);
fassungsvermoegen = b.fassungsvermoegen;
fuellgrad = b.fuellgrad;
}
return *this;
}
В подклассе я тоже перегружаю этот оператор.
BecherMitAufdruck& BecherMitAufdruck::operator=(const BecherMitAufdruck &b)
{
if (this != &b)
{
delete [] inhalt;
delete [] aufdruck;
inhalt = strdupnew(b.inhalt);
aufdruck = strdupnew(b.aufdruck);
fassungsvermoegen = b.fassungsvermoegen;
fuellgrad = b.fuellgrad;
}
return *this;
}
Я хотел бы в подклассе выззвать перегруженный оператор суперкласса, а не писать для каждого параметра отдельное присваивание, т.к. за счёт этого частично теряется смысл наследования. Я пробовал
(Becher)(*this) = (Becher)b;
но это не работает. Понятно, что следует как-то определенить пространство имен, например
Becher::operator=(b)
но как это вызвать для объекта *this мне непонятно.
Как видно, существует класс Becher и подкласс BecherMitAufdruck. В суперклассе я создал перегруженный оператор присваивания.
Becher& Becher::operator=(const Becher &b)
{
if (this != &b)
{
delete [] inhalt;
inhalt = strdupnew(b.inhalt);
fassungsvermoegen = b.fassungsvermoegen;
fuellgrad = b.fuellgrad;
}
return *this;
}
В подклассе я тоже перегружаю этот оператор.
BecherMitAufdruck& BecherMitAufdruck::operator=(const BecherMitAufdruck &b)
{
if (this != &b)
{
delete [] inhalt;
delete [] aufdruck;
inhalt = strdupnew(b.inhalt);
aufdruck = strdupnew(b.aufdruck);
fassungsvermoegen = b.fassungsvermoegen;
fuellgrad = b.fuellgrad;
}
return *this;
}
Я хотел бы в подклассе выззвать перегруженный оператор суперкласса, а не писать для каждого параметра отдельное присваивание, т.к. за счёт этого частично теряется смысл наследования. Я пробовал
(Becher)(*this) = (Becher)b;
но это не работает. Понятно, что следует как-то определенить пространство имен, например
Becher::operator=(b)
но как это вызвать для объекта *this мне непонятно.