return0;
}
②运行结果:
⑷修改上面创建的类,在SimpleCalculator类中创建一个名为answer的private型数据成员,执行某项运算后,将运算结果赋给answer。
增加一个名为getAnswer的函数,其功能为检索对象的最后一次算术运算结果。
同时,再给SimpleCalculator类增加一个构造函数,将answer的值初始化为0.
①修改后代码:
②运行结果
⑹修改程序,给SimpleCalculator类增加input函数,使用户可以自己输入两个double型变量。
函数将输入的值存储在类新增private成员数据a和b中。
再给SimpleCalculator类创建两个构造函数,一个没有参数,将a和b初始化为0;另一个将输入的两个double型变量作为参数,并将a和b初始化为输入的值。
最后,创建一个函数printValues,将a和b的值显示出来。
①修改后代码:
②运行结果
2.【程序输出练习】
⑴有如下的Time类定义
classTime
{
public:
Time();//constructor
voidsetTime(int,int,int);//sethourminutesecond
voidPrintMilitary();//printmilitarytimeformat
voidPrintStandard();//printstandardtimeformat
private:
inthour;//0-23
intminute;//0-59
intsecond;//0-59
};
Time:
:
Time(){hour=minute=second=0;}
voidTime:
:
setTime(inth,intm,ints)
{
hour=(h>=0&&h<24)?
h:
0;
minute=(m>=0&&m<60)?
m:
0;
second=(s>=0&&s<60)?
s:
0;
}
voidTime:
:
printMilitary()
{
cout<<(hour<10?
”0”:
“”)<”
<<(minute<10?
“0”:
“”)<}
voidTime:
:
printStandard()
{
cout<<((hour==0||hour==12)?
12:
hour%12)
<<”:
”<<(minute<10?
“0”:
“”)<<<”:
”<<(second<10?
“0”:
“”)<<<(hour<12?
“AM”:
“PM”);
}
⑵假设采用⑴中的Time类定义,以下语句的输出结果是什么?
(请阅读分析,不要运行代码)
①Timet(3,4,5);
输出结果:
无输出
②t.printStandard();
cout<输出结果:
3:
04:
05AM
③t.printMilitary();
cout<输出结果:
03:
04
④t.setTime(99,3,4);
t.printMilitary();
cout<输出结果:
00:
03
⑶写出下面Time类的两个构造函数的名字和功能,正确的Time类定义是否可以同时包含以下的两个构造函数?
如果不可以,请说明原因。
Time(inth=0,intm=0,ints=0);
Time();
答:
自定义构造函数,自定义初始化数据;缺省构造函数,初始化数据;可以同时存在
3.【程序调试练习】
⑴下列程序运行不正确。
请改正其中的语法错误使得程序可以编译成功。
程序编译后,请比较输出结果与实例输出,并对可能存在的逻辑错误进行修改。
实例输出显示了程序如果正确应该输出的结果。
⑵实例输出:
⑶错误的代码:
(注意:
共有3个文件:
car.h,card.cpp,debugging.cpp,此3个文件放到一个工程中进行调试)
第一个文件card.h
#ifndefCARD_H
#defineCARD_H
classCard{
public:
voidCard();
voidCard(ints,intv);
void~Card();
voidsetSuit(ints);
voidsetValue(intv);
intgetSuit()const;
intgetValue()const;
voidprint()const;
private:
intsuit=4;
intvalue=1;
boolvalidCard()const;
};
#endif
第二个文件card.cpp
#include
usingnamespacestd;
voidCard:
:
Card(){suit=4;value=1;}
Card:
:
Card(ints,intv){suit=s;value=v;}
Card:
:
~Card(){cout<<"Thedestructorhasbeeninvoked\n";}
voidCard:
:
setSuit(ints){suit=s;}
voidCard:
:
setValue(intv){value=v;}
voidprint()
{
if(!
validCard()){
cout<<"Thiscardisnotvalid\n";
return;
}
cout<<"Thisisthe:
";
switch(value){
case1:
cout<<"Ace";
break;
case11:
cout<<"Jack";
break;
case12:
cout<<"Queen";
break;
case13:
cout<<"King";
breawk;
default:
cout<}
switch(suit){
case1:
cout<<"ofclubs\n";
break;
case2:
cout<<"ofdiamonds\n";
break;
case3:
cout<<"ofhearts\n";
break;
case4:
cout<<"ofspades\n";
break;
default:
cout<<"\ninvalidsuit\n";
}
}
intCard:
:
getSuit(){returnsuit;}
intCard:
:
getValue(){returnvalue;}
boolvalidCard()
{
returnvalue>=1&&value<=13&&suit>=1&&suit<=4;
}
voidCard:
:
setValue(intv){value=v;}
voidprint()
{
if(!
validCard()){
cout<<"Thiscardisnotvalid\n";
return;
}
cout<<"Thisisthe:
";
switch(value){
case1:
cout<<"Ace";
break;
case11:
cout<<"Jack";
break;
case12:
cout<<"Queen";
break;
case13:
cout<<"King";
break;
default:
cout<}
switch(suit){
case1:
cout<<"ofclubs\n";
break;
case2:
cout<<"ofdiamonds\n";
break;
case3:
cout<<"ofhearts\n";
break;
case4:
cout<<"ofspades\n";
break;
default:
cout<<"\ninvalidsuit\n";
}
}
intCard:
:
getSuit(){returnsuit;}
intCard:
:
getValue(){returnvalue;}
boolvalidCard()
{
returnvalue>=1&&value<=13&&suit>=1&&suit<=4;
}
第三个文件debugging.cpp
#include
usingnamespacestd;
intmain()
{
Cardc1,c2(3,4),c3(1,14);
Card*p1=&c2;
c1.print();
c2.print();
c3.print();
p1->print();
cout<c1.setSuit(p1->getSuit());
c3.value=12;
p1->value=5;
c1.print();
c2.print();
c3.print();
*p1.print();
cout<return0;
}
⑷修改后代码
#include
#include"car.h"
usingnamespacestd;
Card:
:
Card(){suit=4;value=1;}
Card:
:
Card(ints,intv){suit=s;value=v;}
Card:
:
~Card(){cout<<"Thedestructorhasbeeninvoked\n";}
voidCard:
:
setSuit(ints){suit=s;}
voidCard:
:
setValue(intv){value=v;}
voidCard:
:
print()const
{
if(!
validCard())
{
cout<<"Thiscardisnotvalid\n";
return;
}
cout<<"Thisisthe:
";
switch(value){
case1:
cout<<"Ace";
break;
case11:
cout<<"Jack";
break;
case12:
cout<<"Queen";
break;
case13:
cout<<"King";
break;
default:
cout<}
switch(suit){
case1:
cout<<"ofclubs\n";
break;
case2:
cout<<"ofdiamonds\n";
break;
case3:
cout<<"ofhearts\n";
break;
case4:
cout<<"ofspades\n";
break;
default:
cout<<"\ninvalidsuit\n";
}
}
boolCard:
:
validCard()const
{
returnvalue>=1&&value<=13&&suit>=1&&suit<=4;
}
intCard:
:
getSuit()const{returnsuit;}
intCard:
:
getValue()const{returnvalue;}
#include
#include"car.h"
usingnamespacestd;
intmain()
{
Cardc1,c2(3,4),c3(1,14);
Card*p1=&c2;
c1.print();
c2.print();
c3.print();
p1->print();
cout<c1.setSuit(p1->getSuit());
c3.setValue(12);
p1->setValue(5);
c1.print();
c2.print();
c3.print();
p1->print();
cout<return0;
}
classCard{
public:
Card();
Card(ints,intv);
~Card();
voidsetSuit(ints);
voidsetValue(intv);
intgetSuit()const;
intgetValue()const;
voidprint()const;
private:
intsuit;
intvalue;
boolvalidCard()const;
};
⑸运行结果
4.编程题
⑴题目:
创建一个SavingAccount类,依据下列要求完成该类的定义。
1使用一个static数据成员annualInterestRate保存每个存款者的年利率。
2类的每个对象都包含一个private数据成员savingsBalance,用以指示存款者目前的存款金额。
3该类提供成员函数calculateMonthlyInterest,它将余额乘以annualInterestRate再除以12来计算月利息,这个利息应该加到savingsBalance中。
4该类还提供一个static成员函数modifyInterestRate,它将static的annualInterestRate设置为一个新值。
5编写一段程序代码测试SavingAccount类。
实例化SavingAccount类的两个对象saver1和saver2,余额分别是2000.00元和3000.00元。
将annualInterestRate设置为3%,然后计算月利率并打印每个存款者的新余额。
接着再将annualInterestRate设置为4%,计算下一个月的利息并打印每个存款者的新余额。
⑵要求:
根据题目要求,写出类和应用程序的设计思路和程序代码。
⑶思路:
1类设计:
2应用程序设计:
(主函数中,定义对象及调用对象的成员函数)
⑷程序代码:
#include
usingnamespacestd;
classSavingAccount
{
public:
SavingAccount(doubleb);
calculateMonthlyInterest();//计算月利息
staticvoidmodifyInterestRate(doublef);//设置年利率
~SavingAccount();
private:
staticdoubleannualInterestRate;//年利率
doublesavingsBalance;//余额
};
SavingAccount:
:
~SavingAccount(){};
doubleSavingAccount:
:
annualInterestRate=0.03;
SavingAccount:
:
SavingAccount(doubleb)
{savingsBalance=b;}
SavingAccount:
:
calculateMonthlyInterest()
{savingsBalance=savingsBalance+savingsBalan