У меня есть класс, который хранит указатель на кусок данных и размер данных. Он реализует операции типа «голова», «хвост», ... но это не имеет отношения к вопросу. Я использую это вместо std :: vector, где я не хочу глубокого копирования. Однако мне нужно иногда копировать данные, поэтому для выполнения этой функции у меня есть функция-член «duplicate».Установка базового объекта из метода производного класса
struct ByteArray {
char* data;
int size;
ByteArray(char* data, int size) : data(data), size(size) {}
ByteArray duplicate() const {
char *duplicatedData = new char[size];
memcpy(duplicatedData, data, size);
return ByteArray(duplicatedData, size);
}
};
Теперь у меня есть производный класс - расширение предыдущего класса, где мне нужен метод дубликата слишком, который вызывает базовый класс продублировать. Мне удалось решить это, отбросив оба объекта к базовому классу, но я подозреваю, что это не лучшее решение. Я пропустил более очевидное решение? Также этот класс является правильным решением исходной проблемы (не имея глубокой копии) или существует стандартное решение, о котором я не знаю?
struct Foo : ByteArray
{
int bar;
... // more members
Foo(ByteArray &bytes, int bar) : ByteArray(bytes), bar(bar) {}
Foo duplicate() const {
Foo dup = *this;
static_cast<ByteArray&>(dup) = ByteArray::duplicate();
return dup;
}
};
Вы читали это: http://stackoverflow.com/questions/357307/how-to-call-a-parent-class-function-from-derived-class-function – NathanOliver
К сожалению, я вижу. Из-за нескольких изменений вызов базового метода оставался в этой форме. Я знаю синтаксис метода базового вызова (описанный в связанном ответе), но меня больше интересует назначение объекта, отлитого от базового класса. (Сейчас я отредактирую вопрос) – simon