У меня проблема, что у меня есть указатель на объект базового класса «Элемент» в классе «Список». В определенных ситуациях мне нужно, чтобы Element был более специализированным типом «Переход». Переход происходит от элемента. Но когда я делаю объект Transition из указателя на объект Element, указатель теперь отделен от моего списка классов матриц.Производный объект в том же месте, что и базовый объект
В моих исследованиях до сих пор я читал, что это способ создания производного объекта. Но это не то, что я имел в виду ... Я хочу, чтобы производный объект находился в том же месте, что и указатель базового класса (указатель на класс Element, «последний»). Как мне это сделать?
Пример кода:
#include <iostream>
class Element{
public:
Element(){
member = 0;
}
virtual void set_member(int i){}
void print_member(){
std::cout << member << std::endl;
}
protected:
int member;
};
class Transition: public Element{
public:
void set_member(int i){
member = i;
}
};
class List{
public:
List(){
last = new Element;
}
Element* get_last(){
return last;
}
void print(){
last->print_member();
}
private:
Element* last;
};
int main(){
List list;
Element* last = list.get_last();
last = new Transition; // creates completely new entity.
// I wanted to make a derived object
// from Element at the same location
// as the Elememt object though
last->set_member(1);
last->print_member(); // returns newly assigned value
list.print(); // returns default value of Element type
// but I wanted itto return newly assigned value
}
Пожалуйста, обратите внимание, что вы код, как написано, по меньшей мере две утечки памяти. Возможно, стоит описать то, что вы на самом деле пытаетесь сделать, таким образом, вы можете найти ответ, который решает вашу реальную проблему (т. Е. Способ структурирования решения). – Lionel
Ну, что я на самом деле хочу сделать, чтобы получить доступ к последнему элементу списка с помощью последнего указателя, который является атрибутом моего класса списка. Затем я хочу изменить атрибут последнего элемента списка. –