如何使对象保持活动状态以供以后在另一个函数中使用
How to keep alive an object for later use in another function?
我有一个名为Mijloc_transport
的基类和两个名为Masina
和Tramvai
的派生类。我必须做一个菜单类型程序,该程序可以从派生类中创建不同类型的对象并显示它们。我正在使用UPCAST方法,当我按1时,if(tasta=="1")
会创建一个对象,我可以看到它使用的类型:tabp[0]->show();
。似乎当程序再次进入 do 循环(使用主标签)时,创建为 1 的对象被销毁,我看不到tabp[0]->show();
,因为引用被删除了。我该怎么做才能让这些物体保持活力,以便将它们放入tabp
?
Masina b(30);
p=&b;
tabp[i]=p;
所以以后我可以显示它们....10倍为您提供帮助
#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<<"nnnnn";
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;
}
}
而不是在堆栈上创建对象,如下所示:
Masina b(30);
您必须动态创建它,如下所示:
Masina *b = new Masina(30);
此外,您应该在循环外的某个地方声明Masina *b
,以便它比您在循环中的时间持续更长时间。
而不是:
Masina b(30);
p=&b;
tabp[i]=p;
做:
tabp[i] = new Masina(30);
并且不要忘记做:
for ( unsigned int i = 0; i < MAX; ++i )
{
delete tabp[i];
}
当您不再需要 tabp 时(在现有 main 之前)。
很难阅读您的代码,但根据您的标题,我猜您想使用 new
关键字在堆上创建一个对象。这将允许您在堆(而不是堆栈)上创建一个对象,该对象将在函数退出后保持活动状态,请注意您必须清理与分配new
相关的内存。
tabp[i] = new Masina(30);
但请...每次你使用goto
(尤其是像这样)上帝都会杀死一只小猫。
相关文章:
- 如何将一个类的函数作为另一个类的另一个函数的参数传递
- 将 N-arg 函数包装到另一个函数中
- C++从另一个函数退出函数
- 视觉我希望一个函数在另一个函数C++中进行计算
- 在另一个函数 (c++) 中调用变量
- 如何在另一个函数中使用返回值作为参数?
- 如何包装一个函数以适应另一个函数的所需类型
- 当使用我在一个函数、另一个函数中修改的数组时,在我的输出中得到一个奇怪的负数
- 如何将 lambda 函数作为参数发送到另一个函数
- 将可变参数从一个函数传递到另一个函数
- 有没有办法在另一个函数中加入线程?(即超出其自身范围)
- 存储另一个函数返回的布尔数组时遇到问题
- 我正在尝试将表的地址传递给要在另一个函数中使用的指针,但得到不兼容的指针类型
- 如何在C++中提供模板化函数作为另一个函数的参数,默认值?
- 将作业传递给另一个函数,而不会延迟 arduino
- 编译器在C++中调用另一个函数时,在参数中查找已删除的构造函数
- 将参数从一个函数传递到另一个函数(没有模板) - C++
- 如何利用指针从一个函数到另一个函数?
- 使用另一个函数调用一个函数(都在类中)时出现问题.没有错误代码C++
- 在 c++ 中,如何将当前函数的所有参数传递给另一个函数?