У меня есть базовый класс с именем Mijloc_transport
и 2 производных класса с именами Masina
и Tramvai
.Я должен сделать программу типа меню, которая может создавать различные типы объектов из производных классов и показывать их.Я использую метод UPCASTING, и когда я нажимаю 1, if(tasta=="1")
создает объект, и я вижу, какой тип он использует: tabp[0]->show();
.Кажется, что когда программа снова входит в цикл do (используя основную метку), объект, созданный как 1, уничтожается, и я не вижу tabp[0]->show();
, потому что ссылка удалена.Что мне делать, чтобы объекты оставались живыми, чтобы я мог поместить их в tabp
?
Masina b(30);
p=&b;
tabp[i]=p;
, чтобы позже я мог отобразить их ... 10x за вашу помощь
#include "include.hpp"
#include <ctype.h>
#include <cstdlib>
int main(void)
{
int i=0;
Mijloc_transport *tabp[MAX];
Mijloc_transport *p;
int tasta;
main:
do
{
//cout<<"\n\n\n\n\n";
cout<<endl<<"apasa orice tasta pentru a reveni la meniu "<<endl; getch();
system("cls");
cout<<"Tasteaza numarul optiunii dorite din meniu:"<<endl;
cout<<"1. creaza o masina cu 30 cai putere"<<endl; //create an Masina derived Oject
cout<<"2. creaza un tramvai cu 20 de locuri"<<endl;//create an Tramvai derived Oject
cout<<"3. afiseaza memoria"<<endl; //print the objects
cout<<"4. iesire"<<endl;
tasta=cin.get();
}
while(tasta!='1' && tasta!='2'&& tasta!='3'&& tasta!='4');
if(tasta=='1')
{
Masina b(30);
p=&b;
tabp[i]=p;
tabp[0]->show();
cout<<endl<<"apasa orice tasta pentru a reveni la meniu "<<endl;
getch();
//i++; //TREBUIE INCREMENTAT cand ai mai mult de un obiect
goto main;
}
if(tasta=='3')
{
//afiseaza elementele din memorie
//for(int j=0;j<=i;j++) //J<=i
//tabp[j]->show();
tabp[0]->show();
cout<<endl<<"apasa orice tasta pentru a reveni la meniu "<<endl;
getch();
return 1;
}
}