}
答案MyClass(inti){x=i;}intGetNUm(){returnx;}
37下面的类中定义了一个关于星期的枚举类型,请完成下面的程序。
classMyClass
{
public:
enumWeek{Sun,Mon,Tue,Wed,Thu,Fri,Sat};
Weekweek;
};
voidfun(MyClass&my)
{//将对象my的week赋值为所定义的枚举类型值为3的枚举量
___________=____________;
}
答案my.weekWed
38完成下面的定义。
classMyClass
{
public:
MyClass(){x=0;}
______intGetNum(______my);
private:
intx;
};
intGetNum(_______my)
{
returnmy.x;
}
答案friendMyClassMyClass
39在C++语言中,每个类都有一个隐含的指针叫做_____指针,该指针指向_________。
40当一个类对象的成员函数被调用时,该成员函数的_______指向调用它的对象。
41指向数组的指针是指_________
42指针数组是指____________
43有如下定义语句:
MyClass*p[10];则当指针数组p离开它的作用域时,系统自动调用该类析构函数________次。
44有如下定义语句:
MyClassp[10];则系统自动调用该类构造函数_______次,则当对象数组p离开它的作用域时,系统自动调用该类析构函数________次。
答案39this调用它的对象40this41该指针指向一个数组
42数组的每个元素都是指针430441010
45下面的类定义了拷贝初始化构造函数,请完成该类的定义和实现。
classMyClass
{
public:
MyClass(intxx=0,intyy=0){X=xx;Y=yy;}
____________________;//拷贝初始化构造函数
private:
intX,Y;
};
MyClass:
:
______________//拷贝初始化构造函数的实现
{
X=____________;
______________;
}
答案MyClass(MyClass&p)MyClass(MyClass&p)p.XY=p.Y
46下面程序在构造函数和析构函数申请和释放类的私有成员,请完成该类的实现。
classMyClass
{
public:
MyClass(inta);
~MyClass();
private:
int*X;
};
MyClass:
:
MyClass(inta)
{
_______________;
}
MyClass:
:
~MyClass()
{
______________;
}
答案X=newint(a)deleteX
47重载运算符的函数名由关键字__________引出。
48单目运算符作为类成员函数重载时________形参;双目运算符作为_________重载时需声明其右操作数,作为_________重载时需声明全部操作数。
49利用成员函数对二元运算符重载,其左操作数为________,右操作数为________。
答案47operator48没有类成员函数友元函数49this指针成员函数参数
50下列程序定义了一实部为real,虚部为imag的复数类complex,并在类中重载了复数的+、-操作。
请将下列程序补充完整。
classComplex
{
public:
Complex(doubler=0.0,doublei=0.0){_________}
_________operator+(Complex&);
_________operator–(Complex&,Complex&);
private:
doublereal,imag;
};
_________operator+(Complex&c)
{
returnComplex(________);
}
________operator–(Complex&c1,Complex&c2)
{
returnComplex(________________);
}
答案real=r;imag=i;ComplexfriendComplexComplexComplex:
:
real+c.real,imag+c.imagComplexc1.real+c2.real,c1.imag+c2.imag
51如果类Alpha继承了类Beta,则类Alpha称为_____类,类Beta称为_____类。
52若类Y是类X的私有派生类,类Z是类Y的派生类,则类Z_______访问类X的保护成员和公有成员。
53当用protected继承从基类派生一个类时,基类的public成员成为派生类的_______成员,protected成员成为派生类_________成员。
54多重继承情况下,基类的构造函数的执行顺序取决于______派生类时所指定的各基类的顺序。
55在建立派生类的对象时,构造函数的执行顺序为:
先执行_________,再执行___________,最后执行____________。
56在结束派生类的对象时,析构函数的执行顺序为:
先执行_________,再执行___________,最后执行____________。
57构造函数________被继承,析构函数_______被继承。
58在派生类中使用基类的成员,可以显示地使用_________来使用基类成员。
59多重继承时,多个基类中拥有一个同名成员,则________用调整访问权限确定对该成员的访问。
60指向基类对象的指针变量也可以指向___________的对象。
61一个指向基类的指针,通过______________可以置给一个指向派生类的指针,但程序员必须保证该基类指针实际是指向派生类对象。
62____________类的对象可作为基类的对象处理。
答案51派生基52不能53protectedprotected54定义55基类构造函数
对象成员构造函数派生类的构造函数56派生类的析构函数对象成员析构函数
基类析构函数57不能不能58基类名限定59不能60派生类61强制类型转换
62派生
63在划线处填上适当的语句,完成下列程序。
#include
classPoint
{
public:
Point(doublea,doubleb,doublec){________________________}
doubleGetx(){returnX;}
doubleGety(){returnY;}
doubleGetz(){returnZ;}
private:
_______________
protected:
________________
};
classLine:
__________Point
{
public:
Line(doublea,doubleb,doublec,doubled)_____________{______________}
voidshow()
{
cout<cout<cout<cout<}
private:
doubleK;
};
voidmain()
{
Lineobj(1.2,3.4,5.6,7.8);
obj.show();
}
答案X=a;Y=b;Z=c;doubleX;doubleY,Z;protedtedPoint(a,b,c)k=d;
64根据基类的定义和测试程序,完成下面派生类的定义。
ClassPoint
{
public:
Point(inti=0,intj=0){X=i;Y=j;}
VoidMove(intxOff,intyOff){X+=xOff;Y+=yOff;}
intGetX(){returnX;}
intGetY(){returnY;}
private:
intX,Y;
};
classRectangle:
privatePoint
{
public:
Rectangle(intx,inty,intw,inth)___________{_____________}
voidMove(intxOff,intyOff){___________________}
intGetX(){________________________}
intGetY(){________________________}
intGetW(){_______________}
intGetH(){________________}
private:
intW,H;
};
#include
voidmain()
{
Rectanglerect(1,2,3,4);
rect.Move(5,6);
cout<<"Thedataofrect(X,Y,W,H):
("
<<}
答案Point(s,y)W=w;H=hPoint:
:
Move(xoff,yoff)returnPoint:
:
GetX();
returnPoint:
:
GetY()returnW;returnH;
65在横线处填上适当的语句,完成程序。
#include
classA
{
public:
voidf(inti){cout<
voidg(){cout<<"g"<};
classB:
privateA
{
public:
voidh(){cout<<"h"<_______________________
};
voidmain()
{
Bd1;
d1.f(6);
______.h();
}
答案voidf(inti){A:
:
f(i);}d1
66在下列给定的继承结构中,判断横线行语句是否有二义性。
classBase1
{
public:
intx;
intfun1();
intfun2();
intfun2(int);
intfun3();
};
classBase2
{
public:
charfun2();
intfun3();
private:
intx;
intfun1();
};
classDerived:
publicBase1,publicBase2
{
};
voidmain()
{
Derivedd;
d.x=1;//__________
d.fun1();//__________
d.fun2();//__________
d.fun2(10);//_________
d.fun3();//_________
}
答案有有有有有
67动态联编中直到________时才能确定调用哪个函数;而静态联编则是在______时进行的。
68静态联编所支持的多态性称为______多态性,动态联编所支持的多态性则称为_____多态性,运行多态性由______来支持。
69对虚函数使用对象指针或引用调用,系统使用__________联编;使用对象调用时,系统使用________联编。
70动态联编时在________支持下,通过__________调用来实现的。
71在一个成员函数内调用一个虚函数时,对该虚函数的调用进行____联编。
72C++中不支持虚构造函数,但______虚析构函数。
73在类定义中,将_______置于虚函数的函数原型的末尾可以将虚函数声明为存虚函数。
74带有_________的类称为抽象类,它只能作为_______来使用。
答案67运行编译68编译运行虚函数69动态静态70虚函数指针或引用
71动态72支持73=074纯虚函数基类
75下列程序运行结果如下:
Derive1’sPrint()called.88
Derive2’sPrint()called.99
根据结果将程序补充完整。
#include
classBase
{
public:
Base(inti){b=i;}
_____________;
protected:
intb;
};
classDerived1:
publicBase
{
public:
_______________
voidPrint()
{
cout<<”Derive1’sPrint()called.”<
}
};
classDerived2:
publicBase
{
public:
Derived2(inti):
Base(i){}
voidPrint()
{
____________________________________
}
};
voidfun(__________)
{
obj->Print();
}
voidmain()
{
Base*d1=newDerived1(88);
_______________________;
fun(d1);
fun(d2);
deleted1;
_________________;
}
答案virtualvoidPrint()=0Derive(inti):
Base(i){}
cout<<”Derive2’sPrint()called”<Base*objBase*