Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Старожил


Сообщения: 198
Благодарности: 51

Профиль | Отправить PM | Цитировать


Думаю, нормальным решением будет следующее.
Поясню на примере класса Becher.
Создаются вспомогательные методы
Код: Выделить весь код
void Becher::_copy(const Becher &b) {
	inhalt = strdupnew(b.inhalt);
	fassungsvermoegen = b.fassungsvermoegen;
	fuellgrad = b.fuellgrad;
}

void Becher::_destroy() {
	delete [] inhalt;
}
И основные методы будут вызывать их.
Код: Выделить весь код
Becher& Becher::operator=(const Becher &b) {
    if (this != &b) {
		_destroy();
		_copy(b);
    }
    return *this;
}
Becher::~Becher() { _destroy(); }
Becher::Becher(const Becher &b) { _copy(b); }
Далее, в классе потомке, по аналогии создаются основные методы, вспомогательные же будут вызывать сначала впомогательные методы класса-родителя, а затем выполнять свою собственную работу.
Код: Выделить весь код
void BecherMitAufdruck::_copy(const BecherMitAufdruck &b) {
	Becher::_copy(b);
        aufdruck = strdupnew(b.aufdruck);
}

BecherMitAufdruck& BecherMitAufdruck::operator=(const BecherMitAufdruck &b) {
	if (this != &b) {
		_destroy();
		_copy(b);
	}
        return *this;
}
Остальное по аналогии.

Надеюсь, мысль ясна.

Последний раз редактировалось PhilB, 10-02-2012 в 23:41.

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:36, 10-02-2012 | #2