IAE*_*IAE 4 c++ class function
问题说明了一切,真的.我不确定问题是什么.我对班级很新; 我与他们的实践经验接近于nill,但我已经阅读了相当多的关于他们的内容.
我用以下构造函数创建了一个类ECard
ECard::ECard( int bankNum, int PIN )
{
m_BankNum = new int;
m_PIN = new int;
m_Barred = new bool;
m_Amount = new double;
*m_BankNum = bankNum;
*m_PIN = PIN;
*m_Barred = false;
*m_Amount = 100.0;
}
Run Code Online (Sandbox Code Playgroud)
我初始化 EC card( 12345, 54321 )
我还有一个成员函数display(),它只打印出所有成员变量BankNum,PIN,Barred和Amount.
当我在我的main函数中调用此函数card.display()时,输出完全符合我的预期.
但是,当它进入我的循环时:
/* Fine values! */
card.display();
while( true )
{
/* Introductory screen giving user options to choose from */
mainScreen( card );
/* Make a choice... */
choice = readInput();
/* Garbage! */
card.display();
/* Pass it to the switch, watch out for invalid input! doChoice is a bool */
if( !doChoice( choice, card ) )
{
cout << "Bad input- repeat!" << endl;
}
/* TODO: Option to terminate loop. */
}
Run Code Online (Sandbox Code Playgroud)
我尝试在我的doChoice()函数中打印变量,我得到了垃圾.我的所有变量都搞砸了设置.我的Banknumber是一个东西,PIN是一个非常大的负数(不是MIN),Barred突然设置为true,并且我的帐户中有0个钱,即使Barred和Amount在构造函数之外的任何地方都没有明确设置.
/* Outsourced switch that handles the user input from MAIN */
bool doChoice( int choice, ECard card )
{
int inputPIN;
int inputAmount;
/* Garbage! */
card.display();
switch( choice )
{
case 1:
/* Case 1: Charge card with money. Needs PIN and amount */
cout << "PIN Eingeben: ";
inputPIN = readInput();
cout << "\nBetrag Eingeben: ";
inputAmount = readInput();
karte.aufladen( inputAmount, inputPIN );
return true;
Run Code Online (Sandbox Code Playgroud)
如果某些成员函数和输出仍然是德语,我很抱歉.无论如何它都不应该是重要的(因为我可能会为国际公司编程,但我喜欢用英语编写所有的作业,但是如果我超出他的预期,我的老师非常挑剔并降低我的成绩)
变量在进入开关之前已经搞砸了,所以这部分应该只是修辞.我只能看到卡片对象的传递问题,但我不知道为什么会出现问题.我不知道如何修复它,我只是发送每个成员吗?创建一个指向该对象的指针并发送它?我的意思是,我之前传递了卡片对象,而其他功能并没有给我垃圾.只有这一个.
最后一点,如果语法中突然出现错误,那就是因为我很快将我的所有函数和成员翻译成英语,我可能错过了某个地方的资本化或诸如此类的东西.请忽略这些,语法正确并且程序运行,它只显示垃圾值.
你是按价值传递卡.但是因为你有很多指针,并且可能没有编写复制构造函数,所以卡的副本使用指针来改变主循环中"旧"卡也在使用的内存.然后当函数退出时,可能你有一个卡析构函数删除所有成员变量?所以你基本上有悬空指针.如果没有ECard的所有代码,我无法确定,但这是我的猜测.
卡片中我没有指针.我认为int*在那里没有任何好处.然后,因为你想让doChoice更换卡片,所以它需要一个ECard,所以它可以改变你在主要使用的真实卡片.
| 归档时间: |
|
| 查看次数: |
5249 次 |
| 最近记录: |