У меня есть куча классов, которые все наследуют одни и те же атрибуты из общего базового класса. Базовый класс реализует некоторые виртуальные функции, которые работают в общих случаях, в то время как каждый подкласс повторно реализует эти виртуальные функции для множества особых случаев.Можно ли изменить класс объекта C++ после создания экземпляра?
В следующей ситуации: Я хочу, чтобы специальность этих предметов была разделена на одно целое. По сути, я хотел бы реализовать функцию expend()
, которая заставляет объект потерять свой идентификатор подкласса и вернуться к тому, чтобы быть экземпляром базового класса с обычным поведением, реализованным в базовом классе.
Следует отметить, что производные классы не вводят никаких дополнительных переменных, поэтому базовый и производный классы должны иметь одинаковый размер в памяти.
Я открыт для уничтожения старого объекта и создания нового, если я могу создать новый объект по одному и тому же адресу памяти, поэтому существующие указатели не сломаны.
Следующая попытка не работает и производит некоторые, казалось бы, неожиданные действия. Что мне здесь не хватает?
#include <iostream>
class Base {
public:
virtual void whoami() {
std::cout << "I am Base\n";
}
};
class Derived : public Base {
public:
void whoami() {
std::cout << "I am Derived\n";
}
};
Base* object;
int main() {
object = new Derived; //assign a new Derived class instance
object->whoami(); //this prints "I am Derived"
Base baseObject;
*object = baseObject; //reassign existing object to a different type
object->whoami(); //but it *STILL* prints "I am Derived" (!)
return 0;
}
Помните, что C++ не является динамическим языком, как только он скомпилирован, все исправлено. –
Что вы, кажется, просите, это приложение размещения нового, но я не буду давать ответа - это плохой дизайн IMO. – matb
Возможно, вы можете использовать стратегию разработки pantern вместо класса hierachy –