一个C++的程序,不知道为什么结果得出-9.25596e+061

#include <iostream>
using namespace std;

class Account{
public:
//Constructor
Account(){ balance =balanceMaturity=interestRate =0.0;term=0;}
Account(double b, double r, int t);

//Accessor
double getBalance() { return balance; }
double getInterestRate() { return interestRate;}
int getTerm() { return term;}
double getBalanceMaturity() {return balanceMaturity;}

//Mutator
void Deposit(double amount);
int WithDraw(double amount);
void AdjustRate(double newRate);
void SetTerm(int newTerm);
void CalBalanceMaturity();

private:
double balance;
double balanceMaturity;
double interestRate;
int term;
};

void PrintAccount( Account &account){
cout << "Your account has MOP " << account.getBalance() << endl;
cout << "The current interest rate is " << account.getInterestRate() << endl;
cout << "The deposite term is " << account.getTerm() << endl;
cout<<"After the term of"<<account.getTerm()<<"month"<<endl;
cout<<"Your account will have a balance (Maturity) of MOP"<<account.getBalanceMaturity()<<endl;
}

Account::Account(double b,double r,int t)
{
balance=b;
interestRate=r;
term=t;}
void Account::Deposit(double amount) {
balance+=amount;

}

int Account::WithDraw(double amount) {
if (balance>=amount) {
balance-=amount;
cout <<"Your account has MOP"<<balance<<endl;
return 0;
}
else if (balance<amount) {
cout <<"your account has not enough money"<<endl;
return -1;
}
}

void Account::AdjustRate(double newRate) {

interestRate=newRate;

}

void Account::SetTerm(int newTerm)
{

term=newTerm;

}
void Account::CalBalanceMaturity(){
balanceMaturity=balance+balance*(interestRate/100)*((double)term/12);
}

int main()
{
Account HenryAcc;
Account RaymondAcc(10000,3,18);
Account SophiaAcc(30000,3,36);

cout << "-----Operations on Henry's Account-----" << endl;
PrintAccount(HenryAcc);
HenryAcc.Deposit(5000);
HenryAcc.AdjustRate(1.5);
HenryAcc.SetTerm(6);
PrintAccount(HenryAcc);
cout << "-----End of Operations on Henry's Account-----" << endl;
cout << endl;

cout << "-----Operations on Raymond's Account-----" << endl;
PrintAccount(RaymondAcc);
RaymondAcc.WithDraw(2000);
RaymondAcc.AdjustRate(3);
RaymondAcc.SetTerm(18);
PrintAccount(RaymondAcc);
cout << "-----End of Operations on Raymond's Account-----" << endl;
cout << endl;

cout << "-----Operations on Sophia's Account-----" << endl;
PrintAccount(SophiaAcc);
cout << "-----End of Operations on Sophia's Account-----" << endl;
return 0;
}
balanceMaturity是-9.25596e+061

Account HenryAcc; // void PrintAccount( Account &account) ps:这里的&就不要了

Account RaymondAcc(10000,3,18); //成功调用了带参构造函数你是初始化了,可是:
Account::Account(double b,double r,int t) //你只是给三个数赋值,却忘了给balanceMaturity赋
{ //值?调用有参构造函数之后,编译器就不调用无参构造函数了!
balance=b;
interestRate=r;
term=t;
} //所以,给出的-9.25596e+061应该是变量的地址什么的乱七八糟的数据吧
Account SophiaAcc(30000,3,36); //问题同上
修改建议:
给有参构造函数加一个成员:
Account(double b, double r, double y,int t);
Account::Account(double b, double r, double y,int t){
balance=b;
interestRate=r;
balanceMaturity=y;
term=t;
}
这样修改之后,(类里面的声明、外面的定义、main里面的对象赋值等都要记得修改!)我运行过,是可以运行无误的。可是,我估计与你这个程序的的初衷是有些出入的。建议设计的时候,考虑找到一些,还有,代码的可读性非常重要!
code:
#include <iostream>
using namespace std;

class Account{
private:
double balance; //账号
double balanceMaturity; //账户到期
double interestRate; //利率
int term; //存款日期

public:
Account();
Account(double b, double r,double y,int t);

double getBalance(); //得到余额
double getInterestRate(); //查看利率
int getTerm(); //了解存款存放多久
double getBalanceMaturity(); //查看账户是否到期

void Deposit(double amount); //存款
int WithDraw(double amount); //取款
void AdjustRate(double newRate); //修改利率
void SetTerm(int newTerm); //设置存款存放时间
void CalBalanceMaturity(); //账户是否到期
};

Account::Account(){ //不带参构造函数
balance=balanceMaturity=interestRate=0.0;
term=0;
}

Account::Account(double b,double r,double y,int t) //带参构造函数
{
balance=b;
interestRate=r;
term=t;
balanceMaturity=y;
}

double Account::getBalance(){
return balance;
}

double Account::getBalanceMaturity(){
return balanceMaturity;
}

double Account::getInterestRate(){
return interestRate;
}

int Account::getTerm(){
return term;
}

void PrintAccount( Account account){
cout << "Your account has MOP:" << account.getBalance() << endl;
cout << "The current interest rate is:" << account.getInterestRate() << endl;
cout << "The deposite term is: " << account.getTerm() << endl;
cout<<"After the term of:"<<account.getTerm()<<"month"<<endl;
cout<<"Your account will have a balance (Maturity) \
of MOP:"<<account.getBalanceMaturity()<<endl;
}

void Account::Deposit(double amount) {
balance+=amount;
}

int Account::WithDraw(double amount) {
int c;
if (balance>=amount) {
balance-=amount;
cout <<"Your account has MOP"<<balance<<endl;
c=0;
}
else if (balance<amount) {
cout <<"your account has not enough money"<<endl;
c=-1;
}
return c;
}

void Account::AdjustRate(double newRate){
interestRate=newRate;
}

void Account::SetTerm(int newTerm){
term=newTerm;
}

void Account::CalBalanceMaturity(){
balanceMaturity=balance+balance*(interestRate/100)*((double)term/12);
}

int main()
{
Account HenryAcc;
Account RaymondAcc(10000,3,0,18);
Account SophiaAcc(30000,3,0,36);

cout << "-----Operations on Henry's Account-----" << endl;
PrintAccount(HenryAcc);
HenryAcc.Deposit(5000);
HenryAcc.AdjustRate(1.5);
HenryAcc.SetTerm(6);
PrintAccount(HenryAcc);
cout << "-----End of Operations on Henry's Account-----" << endl;
cout << endl;

cout << "-----Operations on Raymond's Account-----" << endl;
PrintAccount(RaymondAcc);
RaymondAcc.WithDraw(2000);
RaymondAcc.AdjustRate(3);
RaymondAcc.SetTerm(18);
PrintAccount(RaymondAcc);
cout << "-----End of Operations on Raymond's Account-----" << endl;
cout << endl;

cout << "-----Operations on Sophia's Account-----" << endl;
PrintAccount(SophiaAcc);
cout << "-----End of Operations on Sophia's Account-----" << endl;
return 0;
}
建议用工程解决问题,能让你这种小型代码级别分支下的中等长度代码看起来更简洁明了!
一个.h文件+两个.cpp文件就能搞定了!
类定义的数据都放头文件里(后缀名为:.h)
类的初始化,成员函数的定义等,放与头文件命名相同的源文件里。(后缀名为:.cpp)
注意,这个文件,是不写main函数的!
还有一个就是有main函数的,可以有实际数据传入的!
eg:
name.h
name.cpp(没有main函数,此文件必须加上一句:#include "name.h" 是为了把头文件的内容包含进来)
test.cpp(有main函数,也必须加上一句::#include "name.h" ,编译器会自动地同时把name.h和name.cpp包含进来)
具体可以找一些相关资料阅读并深入了解,我这里只讲一个大概!我的水平有限,只是为了帮助同行,有什么不对的,体谅!
温馨提示:答案为网友推荐,仅供参考