objCA.GetA()<//2,15
//2,15,2
2)(5分)
intg=10;
intSetValue1(intn)
{n=10;returnn;}
int&SetValue2(int&n)
{n=20;returnn;}
main(){
int&ref=g;
ref=100;SetValue1(ref);
cout<cout<cout<ref=c;ref=15;
cout<}
//100,20,300,15,70(在引用过程中引用变量和原变量成为完全相同的变量)
3)(4分)
classCSample{
intx;
public:
CSample(){cout<<"C1"<CSample(intn){
x=n;
cout<<"C2,x="<};
main(){
CSamplearray1[2];
CSamplearray2[2]={6,8};
CSamplearray3[2]={12};
CSample*array4=newCSample[3];
}
//C1
//C1
//C2,x=6
//C2,x=8
//C2,x=12
//C1
//C1
//C1
//C1
4)(8分)
classDemo{
intid;
public:
Demo(inti)
{id=i;
cout<<"id="<~Demo()
{cout<<"id="<};
Demod1(4);
voidfun(Demod){
staticDemod2
(2);
Demod3(3);
cout<<"fun"<}
voidmain(){
cout<<"main"<fun(d1);
cout<<"endmain"<fun(d1);Demo*p=newDemo(8);(new的空间必须有delete才能析构,否则不能自行析构)
}
/*
id=4,Con
main
id=2,Con
id=3,Con
fun
id=3,Des
id=4,Des
endmain
id=3,Con
fun(全局变量、局部静态变量和全局静态变量在整个程序运行中仅仅构造一次)
id=3,Des
id=4,Des
id=8,Con
id=2,Des
id=4,Des
*/
5)(4分)
classB{
private:
intnBVal;
public:
voidPrint()
{cout<<"nBVal="<voidFun()
{cout<<"B:
:
Fun"<B(intn)
{nBVal=n;}
};
classD:
publicB{
private:
intnDVal;
public:
voidPrint(){
B:
:
Print();
cout<<"nDVal="<}
D(intn):
B(3*n)
{nDVal=n;}
voidFun()
{cout<<"D:
:
Fun"<};
main(){
B*pb;D*pd;
Dd(4);d.Fun();
pb=newB
(2);pd=newD(8);
pb->Fun();pd->Fun();
pb->Print();pd->Print();
pb=&d;pb->Fun();(pb仍是一个B类对象)
pb->Print();
}
/*
D:
:
Fun
B:
:
Fun
D:
:
Fun
nBVal=2
nBVal=24
nDVal=8
B:
:
Fun
nBVal=12
*/
6)(4分)
classBase{
public:
intval;
Base()
{cout<<"BaseConstructor"<~Base()
{cout<<"BaseDestructor"<};
classBase1:
virtualpublicBase{};
classBase2:
virtualpublicBase{};
classDerived:
publicBase1,publicBase2{};
main()
{Derivedd;}
/*
Baseconstructor
Basedestructor
*/
7)(5分)
classA{
public:
A(){}
virtualvoidfunc()
{cout<<"A:
:
func"<~A(){}
virtualvoidfund()
{cout<<"A:
:
fund"<};
classB:
publicA{
public:
B(){func();}
voidfun(){func();}
~B(){fund();}
};
classC:
publicB{
public:
C(){}
voidfunc()
{cout<<"C:
:
func"<~C(){fund();}
voidfund()
{cout<<"C:
:
fund"<};
main()
{Cc;}
/*
A:
:
func
C:
:
fund
A:
:
fund
*/
8)(5分)
template
TMax(Ta,Tb){
cout<<"TemplateMax"<return0;}
doubleMax(doublea,doubleb)
{cout<<"MyMax"<return0;}
main(){
inti=4,j=5;
Max(1.2,3.4);Max(i,j);}
//MyMax
//TemplateMax
9)(5分)
#include
classApple{
private:
intnWeight;
staticintnTotalNumber;
public:
Apple()
{nTotalNumber++;}
~Apple(){nTotalNumber--;}
staticvoidPrintTotal()
{cout<};
intApple:
:
nTotalNumber=0;
AppleFun(Applea)
{a.PrintTotal();returna;}
intmain(){
Applep1,p2;
Apple*p=newApple[3];
Fun(p1);p1.PrintTotal();}
//5
//3
12)(5分)
#include
classA{
public:
virtual~A(){cout<<"DestructA"<};
classB:
publicA{
public:
virtual~B(){cout<<"DestructB"<};
classC:
publicB{
public:
~C(){cout<<"DestructC"<};
voidmain(){
A*pa=newC;
deletepa;Aa;
}
//DestructC
//DestructB
//DestructA
//DestructA
三、程序填空(共20分):
已知以下程序的输出结果,请填出缺少的部分。
您填写的内容里不能包含分号。
1)(6分)下面程序输出结果是:
0
5
请补足程序:
classA{
public:
intval;
A(_____intn_______){val=n;};//(a)
______A&____GetObj(){//(b)
return__*this_______;//(c)
}
};
main(){
Aa;
cout<a.GetObj()=5;
cout<}
//intn
//A&
//*this
2)(4分)下面程序的输出结果是:
A:
:
Fun
C:
:
Do
请补足横线上丢失的部分(4分)
#include
classA{
private:
intnVal;
public:
voidFun()
{cout<<"A:
:
Fun"<voidDo()
{cout<<"A:
:
Do"<};
classB:
publicA{
public:
virtualvoidDo()
{cout<<"B:
:
Do"<};
classC:
publicB{
public:
voidDo()
{cout<<”C:
:
Do”<voidFun()
{cout<<"C:
:
Fun"<};
voidCall(___B&p________){
p.Fun();p.Do();
}
main(){
Cc;
Call(c);
}
//B&p;
4)(6分)
填空使程序能编译通过,并写出运行的输出结果
#include
template<___classT__________>//(a)
classmyclass{
Ti;
public:
myclass(Ta)
{i=a;}
voidshow()
{cout<
};
voidmain(){
myclass<__char*______>obj("This");//(b)
obj.show();
}
该程序输出结果为:
___this_____________//(c)
//classT
//char*
//This
5)4分
下面程序输出的结果是
4,6
请补出丢失的部分(5分):
classA{
intval;
public:
A(intn){val=n;}
intGetVal(){returnval;}
};
classB:
publicA{
private:
intval;
public:
B(intn):
_val(2n),A(3n)___________{}
intGetVal(){returnval;}
}
main(){
Bb1
(2);
cout<:
GetVal()<}
/*
val(4),A(6)
答案不唯一
*/
四、编程题(共10分)
1)(5分)
下面的MyInt类只有一个成员变量。
MyInt类内部的部分代码被隐藏了。
假设下面的程序能编译通过,且输出结果是:
4,1
请写出被隐藏的部分。
(您写的内容必须是能全部放进MyInt类内部的,MyInt的成员函数里不允许使用静态变量)。
#include
classMyInt
{
intnVal;
public:
MyInt(intn){nVal=n;}
intReturnVal(){returnnVal;}
………………….
};
main(){
MyIntobjInt(10);
objInt-2-1-3;
cout<cout<<",";
objInt-2-1;
cout<}
/*
MyInt&operator-(intx){
nVal-=x;
return*this;
}
*/
2)(5分)下面程序的输出结果是:
destructorB
destructorA
请完整写出classA。
限制条件:
不得为classA编写构造函数
#include
classA
{
………
};
classB:
publicA{
public:
~B(){cout<<"destructorB"<};
main()
{
A*pa;
pa=newB;
deletepa;
}
/*
classA{
public:
virtual~A(){cout<<"destructorA"<};
*/