城建大学计算机期末习题练习.docx
《城建大学计算机期末习题练习.docx》由会员分享,可在线阅读,更多相关《城建大学计算机期末习题练习.docx(16页珍藏版)》请在冰点文库上搜索。
城建大学计算机期末习题练习
一、单选题(本题共10小题,每题2分,共20分)
1.下面选项中,不是类的成员函数为
A)构造函数B)析构函数
C)友元函数D)复制构造函数
2.下面对析构函数的正确的描述是
A)系统可以提供默认的析构函数B)析构函数必须由用户定义
C)析构函数可以重载D)析构函数可以设置默认参数
3.关于类和对象不正确的说法是_
A)类是一种类型,它封装了数据和操作B)对象是类的实例
C)一个类的对象只有一个D)一个对象必属于某个类
4.在类的外部,可以被访问的成员有_
A)所有类成员B)private或protected的类成员
C)public的类成员D)public或private的类成员
5.声明一个类的对象时,系统自动调用一个函数;撤消对象时,系统自动调用一个函数;该函数为__
A)成员函数;构造函数B)复制构造函数;析构函数
C)构造函数;析构函数D)析构函数;复制构造函数
6.假定XY为一个类,则该类的拷贝构造函数的声明语句为。
A)XY&(XYx);B)XY(XY&x);
C)XY(XYx);D)XY(XY*x);
7.当一个派生类保护继承一个基类时,基类中的所有公有成员和保护成员成为派生类的
A)友元B)private成员
C)public成员D)protected成员
8.在C++中,要实现动态联编,必须使用_______调用虚函数
A)类名B)派生类指针
C)对象名D)基类指针
9.下列函数原型声明中,_________声明了fun为纯虚函数
A)voidfun()=0;B)virtualvoidfun()=0;
C)virtualvoidfun();D)virtualvoidfun(){};
10.假定AA为一个类,inta()为该类的一个成员函数,若该成员函数在类定义体外定义,则函数头为________。
A)intAA:
:
a() B)intAA:
a()
C)AA:
a() D)AA:
inta()
二、填空题(本题共10小题,每题3分,共30分)
1.类A中有一个数据成员staticintb,在类外为它定义并初始化为0时使用的语句为_;_
2.在一个派生类中,对派生类对象成员、基类成员和子对象成员的初始化次序是先____,后__,最后为_。
3.把函数voidfun();定义为一个类ABC的友元函数,则应在类ABC的定义中加入一条语句:
_;。
4.在C++流类库中,根基类为_______。
5.函数的递归调用是指函数直接或间接地调用。
6.在定义类对象的语句执行时,系统在建立每个对象的过程中将自动调用该类的__,使其初始化。
7.类只能作为基类使用,而不能声明它的对象。
8.若要在程序文件中进行文件输入输出操作。
必须在开始的#include命令中使用__头文件。
9.通过一个对象只能调用它的常成员函数,不能调用其他成员函数。
10.类的成员函数可以在类内或类外定义。
若在类外定义,在类中必需对成员函数进行____。
三、写出下列程序运行后的输出结果(本题共6小题,每题5分,共30分)
1.带默认参数的构造函数
#include
classM
{inta,b;
public:
M(intaa=1,intbb=2):
a(aa),b(bb)
{cout<<"constructor!
"<};voidmain(){Mx,y(2,3);} constructor!3constructor!52.析构函数的调用#includeclassM{int*a;public:M(intaa=3){a=newint(aa);cout<<"constructor!"<<*a<~M(){cout<<"destructor!"<<*a<};voidmain(){Mx[2];M*p=newM(8);deletep;}constructor!3constructor!3constructor!8destructor!8destructor!3destructor!33.运算符+重载#includeclassM{inta,b;public:M(){a=b=0;}M(intaa,intbb){a=aa,b=bb;}Moperator+(M&x){Mr;r.a=a+x.a;r.b=b+x.b;returnr;}Moperator-(M&x){Mr;r.a=a-x.a;r.b=b-x.b;returnr;}voidOutB(){cout<};voidmain(){Mx(3,5),y(8,4),z1,z2;z1=x+y;//x.operator+(y);z2=x-y;z1.OutB();z2.OutB();}119-514.含子对象的派生类#includeclassAX{intx;public:AX(intxx=0):x(xx){}voidoutput(){cout<intGet(){returnx;}};classBX:publicAX{inty;AXz;public:BX(intxx=0,intyy=0):AX(xx),y(yy),z(xx+yy){}voidoutput(){AX::output();cout<cout<}};voidmain(){BXa(8),b(11,22);a.output();b.output();}8808111122335.虚函数实现的多态#includeclassAY{protected:inta,b;public:AY(intaa=0,intbb=0){a=aa;b=bb;}virtualvoidcompute(){cout<};classBY:publicAY{public:BY(intaa=0,intbb=0):AY(aa,bb){}voidcompute(){cout<};classCY:publicBY{public:CY(intaa=0,intbb=0):BY(aa,bb){}voidcompute(){cout<};classDY:publicAY{public:DY(intda=0,intdb=0):AY(da,db){}voidcompute(){if(b!=0)cout<elsecout<<"dixisioriszero!"<};voidmain(){intn=10,m=5;AYay(n,m);BYby(n,m);CYcy(n,m);DYdy(n,m);AY*a[4]={&ay,&by,&cy,&dy};for(inti=0;i<4;i++)a[i]->compute();AY&ax=cy;pute();AYaa=cy;pute();}10+5=1510-5=510*5=5010/5=210*5=5010+5=15一、选择填空1.在下列关键字中,用以说明类中公有成员的是()A.public;B.private;C.protected;D.friend;2.下列的各类函数中,()不是类的成员函数。A.构造函数;B.析构函数;C.友元函数;D.拷贝初始化构造函数;3.作用域运算符的功能是()。A.标识作用域的级别的;B.指出作用域的范围的;A.给定作用域的大小的;D.标识某个成员是属于哪个类的。4.()是不可能作为该类的成员的。A.自身类对象的指针;B.自身类的对象;C.自身类对象的引用;D.另一个类的对象。5.()不是构造函数的特征A.构造函数的函数名与类名相同;B.构造函数可以重载;C.构造函数可以设置缺省参数;D.构造函数必须指定类型说明。6.()是析构函数的特征。A.一个类中只能定义一个析构函数;B.析构函数与类名不同;C.析构函数的定义只能在类体内;D.析构函数可以有各个或多个参数。7.下述静态数据成员的特征中,()是错误的。A.说明静态数据成员时前边要加修饰符static;A.静态数据成员要在类体外进行初始化;B.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符;C.静态数据成员不是所有对象所共用的。8.友元的作用()。A.提高程序的运用效率;B.加强类的封装性;C.实现数据的隐藏性;D.增加成员函数的种类。分析下列程序的输出结果。1.构造函数重载#includeclassA{public:A();A(inti,intj);voidprint();private:inta,b;};A::A(){a=b=0;cout<<”Defaultconstructorcalled.\n”;}A::A(inti,intj){a=i;b=j;cout<<”Constructorcalled.\n”;}voidA::print(){cout<<”a=”<}voidmain(){Am,n(4,8);m.print();n.print();}提示:定义对象的时候调用构造函数Defaultconstructorcalled.Constructorcalled.a=0,b=0a=4,b=82.子对象#includeclassB{public:B();B(inti,intj);voidprintb();private:inta,b;};classA{public:A();A(inti,intj);voidprinta();private:Bc;};A::A(inti,intj):c(i,j){}voidA::printa(){c.printb();}B::B(inti,intj){a=i;b=j;}voidB::printb(){cout<<”a=”<}voidmain(){Am(7,9);m.printa();}a=7,b=9;3.静态成员函数,静态成员#includeclassCount{public:Count(){count++;}staticintHM(){returncount;}~Count(){count--;}private:staticintcount;};intCount::count=100;voidmain(){Countc1,c2,c3,c4;cout<:HM()<}1044.友元函数#includeclassA{public:A(doublet,doubler){Total=t;Rate=r;}frienddoubleCount(A&a){a.Total+=a.Rate*a.Total;returna.Total;}private:doubleTotal,Rate;};voidmain(){Aa1(1000.0,0.035),a2(768.0,0.028);cout<}1035,789.5041、#includeclassA{public:A(inti,intj){a=i;b=j;}voidMove(intx,inty){a+=x;b+=y;}voidShow(){cout<<”(”<private:inta,b;};classB:privateA{public:B(inti,intj,intk,intl):A(i,j){x=k;y=l;}voidShow(){cout<voidfun(){Move(3,5);}voidf1(){A::Show();}private:intx,y;};voidmain(){Ae(1,2);e.Show();Bd(3,4,5,6);d.fun();d.Show();d.f1();}(1,2)5,6(6,9)2、#includeclassB{public:B(inti){b=i+50;show();}B(){}virtualvoidshow(){cout<<”B::show()called.”<protected:intb;};classD:publicB{public:D(inti):B(i){d=i+100;show();}D(){}voidshow(){cout<<”D::show()called.”<protected:intd;};voidmain(){Dd1(108);}B::show()called.158D::show()called.208
};
voidmain()
{
Mx,y(2,3);
}
constructor!
3
5
2.析构函数的调用
{int*a;
M(intaa=3){
a=newint(aa);
cout<<"constructor!
"<<*a<~M(){cout<<"destructor!"<<*a<};voidmain(){Mx[2];M*p=newM(8);deletep;}constructor!3constructor!3constructor!8destructor!8destructor!3destructor!33.运算符+重载#includeclassM{inta,b;public:M(){a=b=0;}M(intaa,intbb){a=aa,b=bb;}Moperator+(M&x){Mr;r.a=a+x.a;r.b=b+x.b;returnr;}Moperator-(M&x){Mr;r.a=a-x.a;r.b=b-x.b;returnr;}voidOutB(){cout<};voidmain(){Mx(3,5),y(8,4),z1,z2;z1=x+y;//x.operator+(y);z2=x-y;z1.OutB();z2.OutB();}119-514.含子对象的派生类#includeclassAX{intx;public:AX(intxx=0):x(xx){}voidoutput(){cout<intGet(){returnx;}};classBX:publicAX{inty;AXz;public:BX(intxx=0,intyy=0):AX(xx),y(yy),z(xx+yy){}voidoutput(){AX::output();cout<cout<}};voidmain(){BXa(8),b(11,22);a.output();b.output();}8808111122335.虚函数实现的多态#includeclassAY{protected:inta,b;public:AY(intaa=0,intbb=0){a=aa;b=bb;}virtualvoidcompute(){cout<};classBY:publicAY{public:BY(intaa=0,intbb=0):AY(aa,bb){}voidcompute(){cout<};classCY:publicBY{public:CY(intaa=0,intbb=0):BY(aa,bb){}voidcompute(){cout<};classDY:publicAY{public:DY(intda=0,intdb=0):AY(da,db){}voidcompute(){if(b!=0)cout<elsecout<<"dixisioriszero!"<};voidmain(){intn=10,m=5;AYay(n,m);BYby(n,m);CYcy(n,m);DYdy(n,m);AY*a[4]={&ay,&by,&cy,&dy};for(inti=0;i<4;i++)a[i]->compute();AY&ax=cy;pute();AYaa=cy;pute();}10+5=1510-5=510*5=5010/5=210*5=5010+5=15一、选择填空1.在下列关键字中,用以说明类中公有成员的是()A.public;B.private;C.protected;D.friend;2.下列的各类函数中,()不是类的成员函数。A.构造函数;B.析构函数;C.友元函数;D.拷贝初始化构造函数;3.作用域运算符的功能是()。A.标识作用域的级别的;B.指出作用域的范围的;A.给定作用域的大小的;D.标识某个成员是属于哪个类的。4.()是不可能作为该类的成员的。A.自身类对象的指针;B.自身类的对象;C.自身类对象的引用;D.另一个类的对象。5.()不是构造函数的特征A.构造函数的函数名与类名相同;B.构造函数可以重载;C.构造函数可以设置缺省参数;D.构造函数必须指定类型说明。6.()是析构函数的特征。A.一个类中只能定义一个析构函数;B.析构函数与类名不同;C.析构函数的定义只能在类体内;D.析构函数可以有各个或多个参数。7.下述静态数据成员的特征中,()是错误的。A.说明静态数据成员时前边要加修饰符static;A.静态数据成员要在类体外进行初始化;B.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符;C.静态数据成员不是所有对象所共用的。8.友元的作用()。A.提高程序的运用效率;B.加强类的封装性;C.实现数据的隐藏性;D.增加成员函数的种类。分析下列程序的输出结果。1.构造函数重载#includeclassA{public:A();A(inti,intj);voidprint();private:inta,b;};A::A(){a=b=0;cout<<”Defaultconstructorcalled.\n”;}A::A(inti,intj){a=i;b=j;cout<<”Constructorcalled.\n”;}voidA::print(){cout<<”a=”<}voidmain(){Am,n(4,8);m.print();n.print();}提示:定义对象的时候调用构造函数Defaultconstructorcalled.Constructorcalled.a=0,b=0a=4,b=82.子对象#includeclassB{public:B();B(inti,intj);voidprintb();private:inta,b;};classA{public:A();A(inti,intj);voidprinta();private:Bc;};A::A(inti,intj):c(i,j){}voidA::printa(){c.printb();}B::B(inti,intj){a=i;b=j;}voidB::printb(){cout<<”a=”<}voidmain(){Am(7,9);m.printa();}a=7,b=9;3.静态成员函数,静态成员#includeclassCount{public:Count(){count++;}staticintHM(){returncount;}~Count(){count--;}private:staticintcount;};intCount::count=100;voidmain(){Countc1,c2,c3,c4;cout<:HM()<}1044.友元函数#includeclassA{public:A(doublet,doubler){Total=t;Rate=r;}frienddoubleCount(A&a){a.Total+=a.Rate*a.Total;returna.Total;}private:doubleTotal,Rate;};voidmain(){Aa1(1000.0,0.035),a2(768.0,0.028);cout<}1035,789.5041、#includeclassA{public:A(inti,intj){a=i;b=j;}voidMove(intx,inty){a+=x;b+=y;}voidShow(){cout<<”(”<private:inta,b;};classB:privateA{public:B(inti,intj,intk,intl):A(i,j){x=k;y=l;}voidShow(){cout<voidfun(){Move(3,5);}voidf1(){A::Show();}private:intx,y;};voidmain(){Ae(1,2);e.Show();Bd(3,4,5,6);d.fun();d.Show();d.f1();}(1,2)5,6(6,9)2、#includeclassB{public:B(inti){b=i+50;show();}B(){}virtualvoidshow(){cout<<”B::show()called.”<protected:intb;};classD:publicB{public:D(inti):B(i){d=i+100;show();}D(){}voidshow(){cout<<”D::show()called.”<protected:intd;};voidmain(){Dd1(108);}B::show()called.158D::show()called.208
~M(){cout<<"destructor!
"<<*a<};voidmain(){Mx[2];M*p=newM(8);deletep;}constructor!3constructor!3constructor!8destructor!8destructor!3destructor!33.运算符+重载#includeclassM{inta,b;public:M(){a=b=0;}M(intaa,intbb){a=aa,b=bb;}Moperator+(M&x){Mr;r.a=a+x.a;r.b=b+x.b;returnr;}Moperator-(M&x){Mr;r.a=a-x.a;r.b=b-x.b;returnr;}voidOutB(){cout<};voidmain(){Mx(3,5),y(8,4),z1,z2;z1=x+y;//x.operator+(y);z2=x-y;z1.OutB();z2.OutB();}119-514.含子对象的派生类#includeclassAX{intx;public:AX(intxx=0):x(xx){}voidoutput(){cout<intGet(){returnx;}};classBX:publicAX{inty;AXz;public:BX(intxx=0,intyy=0):AX(xx),y(yy),z(xx+yy){}voidoutput(){AX::output();cout<cout<}};voidmain(){BXa(8),b(11,22);a.output();b.output();}8808111122335.虚函数实现的多态#includeclassAY{protected:inta,b;public:AY(intaa=0,intbb=0){a=aa;b=bb;}virtualvoidcompute(){cout<};classBY:publicAY{public:BY(intaa=0,intbb=0):AY(aa,bb){}voidcompute(){cout<};classCY:publicBY{public:CY(intaa=0,intbb=0):BY(aa,bb){}voidcompute(){cout<};classDY:publicAY{public:DY(intda=0,intdb=0):AY(da,db){}voidcompute(){if(b!=0)cout<elsecout<<"dixisioriszero!"<};voidmain(){intn=10,m=5;AYay(n,m);BYby(n,m);CYcy(n,m);DYdy(n,m);AY*a[4]={&ay,&by,&cy,&dy};for(inti=0;i<4;i++)a[i]->compute();AY&ax=cy;pute();AYaa=cy;pute();}10+5=1510-5=510*5=5010/5=210*5=5010+5=15一、选择填空1.在下列关键字中,用以说明类中公有成员的是()A.public;B.private;C.protected;D.friend;2.下列的各类函数中,()不是类的成员函数。A.构造函数;B.析构函数;C.友元函数;D.拷贝初始化构造函数;3.作用域运算符的功能是()。A.标识作用域的级别的;B.指出作用域的范围的;A.给定作用域的大小的;D.标识某个成员是属于哪个类的。4.()是不可能作为该类的成员的。A.自身类对象的指针;B.自身类的对象;C.自身类对象的引用;D.另一个类的对象。5.()不是构造函数的特征A.构造函数的函数名与类名相同;B.构造函数可以重载;C.构造函数可以设置缺省参数;D.构造函数必须指定类型说明。6.()是析构函数的特征。A.一个类中只能定义一个析构函数;B.析构函数与类名不同;C.析构函数的定义只能在类体内;D.析构函数可以有各个或多个参数。7.下述静态数据成员的特征中,()是错误的。A.说明静态数据成员时前边要加修饰符static;A.静态数据成员要在类体外进行初始化;B.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符;C.静态数据成员不是所有对象所共用的。8.友元的作用()。A.提高程序的运用效率;B.加强类的封装性;C.实现数据的隐藏性;D.增加成员函数的种类。分析下列程序的输出结果。1.构造函数重载#includeclassA{public:A();A(inti,intj);voidprint();private:inta,b;};A::A(){a=b=0;cout<<”Defaultconstructorcalled.\n”;}A::A(inti,intj){a=i;b=j;cout<<”Constructorcalled.\n”;}voidA::print(){cout<<”a=”<}voidmain(){Am,n(4,8);m.print();n.print();}提示:定义对象的时候调用构造函数Defaultconstructorcalled.Constructorcalled.a=0,b=0a=4,b=82.子对象#includeclassB{public:B();B(inti,intj);voidprintb();private:inta,b;};classA{public:A();A(inti,intj);voidprinta();private:Bc;};A::A(inti,intj):c(i,j){}voidA::printa(){c.printb();}B::B(inti,intj){a=i;b=j;}voidB::printb(){cout<<”a=”<}voidmain(){Am(7,9);m.printa();}a=7,b=9;3.静态成员函数,静态成员#includeclassCount{public:Count(){count++;}staticintHM(){returncount;}~Count(){count--;}private:staticintcount;};intCount::count=100;voidmain(){Countc1,c2,c3,c4;cout<:HM()<}1044.友元函数#includeclassA{public:A(doublet,doubler){Total=t;Rate=r;}frienddoubleCount(A&a){a.Total+=a.Rate*a.Total;returna.Total;}private:doubleTotal,Rate;};voidmain(){Aa1(1000.0,0.035),a2(768.0,0.028);cout<}1035,789.5041、#includeclassA{public:A(inti,intj){a=i;b=j;}voidMove(intx,inty){a+=x;b+=y;}voidShow(){cout<<”(”<private:inta,b;};classB:privateA{public:B(inti,intj,intk,intl):A(i,j){x=k;y=l;}voidShow(){cout<voidfun(){Move(3,5);}voidf1(){A::Show();}private:intx,y;};voidmain(){Ae(1,2);e.Show();Bd(3,4,5,6);d.fun();d.Show();d.f1();}(1,2)5,6(6,9)2、#includeclassB{public:B(inti){b=i+50;show();}B(){}virtualvoidshow(){cout<<”B::show()called.”<protected:intb;};classD:publicB{public:D(inti):B(i){d=i+100;show();}D(){}voidshow(){cout<<”D::show()called.”<protected:intd;};voidmain(){Dd1(108);}B::show()called.158D::show()called.208
{Mx[2];
M*p=newM(8);
deletep;
8
destructor!
3.运算符+重载
classM{
inta,b;
M(){a=b=0;}
M(intaa,intbb){a=aa,b=bb;}
Moperator+(M&x)
{Mr;
r.a=a+x.a;
r.b=b+x.b;
returnr;
Moperator-(M&x)
r.a=a-x.a;
r.b=b-x.b;
voidOutB()
{cout<};voidmain(){Mx(3,5),y(8,4),z1,z2;z1=x+y;//x.operator+(y);z2=x-y;z1.OutB();z2.OutB();}119-514.含子对象的派生类#includeclassAX{intx;public:AX(intxx=0):x(xx){}voidoutput(){cout<intGet(){returnx;}};classBX:publicAX{inty;AXz;public:BX(intxx=0,intyy=0):AX(xx),y(yy),z(xx+yy){}voidoutput(){AX::output();cout<cout<}};voidmain(){BXa(8),b(11,22);a.output();b.output();}8808111122335.虚函数实现的多态#includeclassAY{protected:inta,b;public:AY(intaa=0,intbb=0){a=aa;b=bb;}virtualvoidcompute(){cout<};classBY:publicAY{public:BY(intaa=0,intbb=0):AY(aa,bb){}voidcompute(){cout<};classCY:publicBY{public:CY(intaa=0,intbb=0):BY(aa,bb){}voidcompute(){cout<};classDY:publicAY{public:DY(intda=0,intdb=0):AY(da,db){}voidcompute(){if(b!=0)cout<elsecout<<"dixisioriszero!"<};voidmain(){intn=10,m=5;AYay(n,m);BYby(n,m);CYcy(n,m);DYdy(n,m);AY*a[4]={&ay,&by,&cy,&dy};for(inti=0;i<4;i++)a[i]->compute();AY&ax=cy;pute();AYaa=cy;pute();}10+5=1510-5=510*5=5010/5=210*5=5010+5=15一、选择填空1.在下列关键字中,用以说明类中公有成员的是()A.public;B.private;C.protected;D.friend;2.下列的各类函数中,()不是类的成员函数。A.构造函数;B.析构函数;C.友元函数;D.拷贝初始化构造函数;3.作用域运算符的功能是()。A.标识作用域的级别的;B.指出作用域的范围的;A.给定作用域的大小的;D.标识某个成员是属于哪个类的。4.()是不可能作为该类的成员的。A.自身类对象的指针;B.自身类的对象;C.自身类对象的引用;D.另一个类的对象。5.()不是构造函数的特征A.构造函数的函数名与类名相同;B.构造函数可以重载;C.构造函数可以设置缺省参数;D.构造函数必须指定类型说明。6.()是析构函数的特征。A.一个类中只能定义一个析构函数;B.析构函数与类名不同;C.析构函数的定义只能在类体内;D.析构函数可以有各个或多个参数。7.下述静态数据成员的特征中,()是错误的。A.说明静态数据成员时前边要加修饰符static;A.静态数据成员要在类体外进行初始化;B.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符;C.静态数据成员不是所有对象所共用的。8.友元的作用()。A.提高程序的运用效率;B.加强类的封装性;C.实现数据的隐藏性;D.增加成员函数的种类。分析下列程序的输出结果。1.构造函数重载#includeclassA{public:A();A(inti,intj);voidprint();private:inta,b;};A::A(){a=b=0;cout<<”Defaultconstructorcalled.\n”;}A::A(inti,intj){a=i;b=j;cout<<”Constructorcalled.\n”;}voidA::print(){cout<<”a=”<}voidmain(){Am,n(4,8);m.print();n.print();}提示:定义对象的时候调用构造函数Defaultconstructorcalled.Constructorcalled.a=0,b=0a=4,b=82.子对象#includeclassB{public:B();B(inti,intj);voidprintb();private:inta,b;};classA{public:A();A(inti,intj);voidprinta();private:Bc;};A::A(inti,intj):c(i,j){}voidA::printa(){c.printb();}B::B(inti,intj){a=i;b=j;}voidB::printb(){cout<<”a=”<}voidmain(){Am(7,9);m.printa();}a=7,b=9;3.静态成员函数,静态成员#includeclassCount{public:Count(){count++;}staticintHM(){returncount;}~Count(){count--;}private:staticintcount;};intCount::count=100;voidmain(){Countc1,c2,c3,c4;cout<:HM()<}1044.友元函数#includeclassA{public:A(doublet,doubler){Total=t;Rate=r;}frienddoubleCount(A&a){a.Total+=a.Rate*a.Total;returna.Total;}private:doubleTotal,Rate;};voidmain(){Aa1(1000.0,0.035),a2(768.0,0.028);cout<}1035,789.5041、#includeclassA{public:A(inti,intj){a=i;b=j;}voidMove(intx,inty){a+=x;b+=y;}voidShow(){cout<<”(”<private:inta,b;};classB:privateA{public:B(inti,intj,intk,intl):A(i,j){x=k;y=l;}voidShow(){cout<voidfun(){Move(3,5);}voidf1(){A::Show();}private:intx,y;};voidmain(){Ae(1,2);e.Show();Bd(3,4,5,6);d.fun();d.Show();d.f1();}(1,2)5,6(6,9)2、#includeclassB{public:B(inti){b=i+50;show();}B(){}virtualvoidshow(){cout<<”B::show()called.”<protected:intb;};classD:publicB{public:D(inti):B(i){d=i+100;show();}D(){}voidshow(){cout<<”D::show()called.”<protected:intd;};voidmain(){Dd1(108);}B::show()called.158D::show()called.208
{Mx(3,5),y(8,4),z1,z2;
z1=x+y;//x.operator+(y);
z2=x-y;
z1.OutB();z2.OutB();
119
-51
4.含子对象的派生类
classAX
{intx;
AX(intxx=0):
x(xx){}
voidoutput()
{cout<intGet(){returnx;}};classBX:publicAX{inty;AXz;public:BX(intxx=0,intyy=0):AX(xx),y(yy),z(xx+yy){}voidoutput(){AX::output();cout<cout<}};voidmain(){BXa(8),b(11,22);a.output();b.output();}8808111122335.虚函数实现的多态#includeclassAY{protected:inta,b;public:AY(intaa=0,intbb=0){a=aa;b=bb;}virtualvoidcompute(){cout<};classBY:publicAY{public:BY(intaa=0,intbb=0):AY(aa,bb){}voidcompute(){cout<};classCY:publicBY{public:CY(intaa=0,intbb=0):BY(aa,bb){}voidcompute(){cout<};classDY:publicAY{public:DY(intda=0,intdb=0):AY(da,db){}voidcompute(){if(b!=0)cout<elsecout<<"dixisioriszero!"<};voidmain(){intn=10,m=5;AYay(n,m);BYby(n,m);CYcy(n,m);DYdy(n,m);AY*a[4]={&ay,&by,&cy,&dy};for(inti=0;i<4;i++)a[i]->compute();AY&ax=cy;pute();AYaa=cy;pute();}10+5=1510-5=510*5=5010/5=210*5=5010+5=15一、选择填空1.在下列关键字中,用以说明类中公有成员的是()A.public;B.private;C.protected;D.friend;2.下列的各类函数中,()不是类的成员函数。A.构造函数;B.析构函数;C.友元函数;D.拷贝初始化构造函数;3.作用域运算符的功能是()。A.标识作用域的级别的;B.指出作用域的范围的;A.给定作用域的大小的;D.标识某个成员是属于哪个类的。4.()是不可能作为该类的成员的。A.自身类对象的指针;B.自身类的对象;C.自身类对象的引用;D.另一个类的对象。5.()不是构造函数的特征A.构造函数的函数名与类名相同;B.构造函数可以重载;C.构造函数可以设置缺省参数;D.构造函数必须指定类型说明。6.()是析构函数的特征。A.一个类中只能定义一个析构函数;B.析构函数与类名不同;C.析构函数的定义只能在类体内;D.析构函数可以有各个或多个参数。7.下述静态数据成员的特征中,()是错误的。A.说明静态数据成员时前边要加修饰符static;A.静态数据成员要在类体外进行初始化;B.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符;C.静态数据成员不是所有对象所共用的。8.友元的作用()。A.提高程序的运用效率;B.加强类的封装性;C.实现数据的隐藏性;D.增加成员函数的种类。分析下列程序的输出结果。1.构造函数重载#includeclassA{public:A();A(inti,intj);voidprint();private:inta,b;};A::A(){a=b=0;cout<<”Defaultconstructorcalled.\n”;}A::A(inti,intj){a=i;b=j;cout<<”Constructorcalled.\n”;}voidA::print(){cout<<”a=”<}voidmain(){Am,n(4,8);m.print();n.print();}提示:定义对象的时候调用构造函数Defaultconstructorcalled.Constructorcalled.a=0,b=0a=4,b=82.子对象#includeclassB{public:B();B(inti,intj);voidprintb();private:inta,b;};classA{public:A();A(inti,intj);voidprinta();private:Bc;};A::A(inti,intj):c(i,j){}voidA::printa(){c.printb();}B::B(inti,intj){a=i;b=j;}voidB::printb(){cout<<”a=”<}voidmain(){Am(7,9);m.printa();}a=7,b=9;3.静态成员函数,静态成员#includeclassCount{public:Count(){count++;}staticintHM(){returncount;}~Count(){count--;}private:staticintcount;};intCount::count=100;voidmain(){Countc1,c2,c3,c4;cout<:HM()<}1044.友元函数#includeclassA{public:A(doublet,doubler){Total=t;Rate=r;}frienddoubleCount(A&a){a.Total+=a.Rate*a.Total;returna.Total;}private:doubleTotal,Rate;};voidmain(){Aa1(1000.0,0.035),a2(768.0,0.028);cout<}1035,789.5041、#includeclassA{public:A(inti,intj){a=i;b=j;}voidMove(intx,inty){a+=x;b+=y;}voidShow(){cout<<”(”<private:inta,b;};classB:privateA{public:B(inti,intj,intk,intl):A(i,j){x=k;y=l;}voidShow(){cout<voidfun(){Move(3,5);}voidf1(){A::Show();}private:intx,y;};voidmain(){Ae(1,2);e.Show();Bd(3,4,5,6);d.fun();d.Show();d.f1();}(1,2)5,6(6,9)2、#includeclassB{public:B(inti){b=i+50;show();}B(){}virtualvoidshow(){cout<<”B::show()called.”<protected:intb;};classD:publicB{public:D(inti):B(i){d=i+100;show();}D(){}voidshow(){cout<<”D::show()called.”<protected:intd;};voidmain(){Dd1(108);}B::show()called.158D::show()called.208
intGet(){returnx;}
classBX:
publicAX
{inty;
AXz;
BX(intxx=0,intyy=0):
AX(xx),y(yy),z(xx+yy){}
{AX:
output();cout<cout<}};voidmain(){BXa(8),b(11,22);a.output();b.output();}8808111122335.虚函数实现的多态#includeclassAY{protected:inta,b;public:AY(intaa=0,intbb=0){a=aa;b=bb;}virtualvoidcompute(){cout<};classBY:publicAY{public:BY(intaa=0,intbb=0):AY(aa,bb){}voidcompute(){cout<};classCY:publicBY{public:CY(intaa=0,intbb=0):BY(aa,bb){}voidcompute(){cout<};classDY:publicAY{public:DY(intda=0,intdb=0):AY(da,db){}voidcompute(){if(b!=0)cout<elsecout<<"dixisioriszero!"<};voidmain(){intn=10,m=5;AYay(n,m);BYby(n,m);CYcy(n,m);DYdy(n,m);AY*a[4]={&ay,&by,&cy,&dy};for(inti=0;i<4;i++)a[i]->compute();AY&ax=cy;pute();AYaa=cy;pute();}10+5=1510-5=510*5=5010/5=210*5=5010+5=15一、选择填空1.在下列关键字中,用以说明类中公有成员的是()A.public;B.private;C.protected;D.friend;2.下列的各类函数中,()不是类的成员函数。A.构造函数;B.析构函数;C.友元函数;D.拷贝初始化构造函数;3.作用域运算符的功能是()。A.标识作用域的级别的;B.指出作用域的范围的;A.给定作用域的大小的;D.标识某个成员是属于哪个类的。4.()是不可能作为该类的成员的。A.自身类对象的指针;B.自身类的对象;C.自身类对象的引用;D.另一个类的对象。5.()不是构造函数的特征A.构造函数的函数名与类名相同;B.构造函数可以重载;C.构造函数可以设置缺省参数;D.构造函数必须指定类型说明。6.()是析构函数的特征。A.一个类中只能定义一个析构函数;B.析构函数与类名不同;C.析构函数的定义只能在类体内;D.析构函数可以有各个或多个参数。7.下述静态数据成员的特征中,()是错误的。A.说明静态数据成员时前边要加修饰符static;A.静态数据成员要在类体外进行初始化;B.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符;C.静态数据成员不是所有对象所共用的。8.友元的作用()。A.提高程序的运用效率;B.加强类的封装性;C.实现数据的隐藏性;D.增加成员函数的种类。分析下列程序的输出结果。1.构造函数重载#includeclassA{public:A();A(inti,intj);voidprint();private:inta,b;};A::A(){a=b=0;cout<<”Defaultconstructorcalled.\n”;}A::A(inti,intj){a=i;b=j;cout<<”Constructorcalled.\n”;}voidA::print(){cout<<”a=”<}voidmain(){Am,n(4,8);m.print();n.print();}提示:定义对象的时候调用构造函数Defaultconstructorcalled.Constructorcalled.a=0,b=0a=4,b=82.子对象#includeclassB{public:B();B(inti,intj);voidprintb();private:inta,b;};classA{public:A();A(inti,intj);voidprinta();private:Bc;};A::A(inti,intj):c(i,j){}voidA::printa(){c.printb();}B::B(inti,intj){a=i;b=j;}voidB::printb(){cout<<”a=”<}voidmain(){Am(7,9);m.printa();}a=7,b=9;3.静态成员函数,静态成员#includeclassCount{public:Count(){count++;}staticintHM(){returncount;}~Count(){count--;}private:staticintcount;};intCount::count=100;voidmain(){Countc1,c2,c3,c4;cout<:HM()<}1044.友元函数#includeclassA{public:A(doublet,doubler){Total=t;Rate=r;}frienddoubleCount(A&a){a.Total+=a.Rate*a.Total;returna.Total;}private:doubleTotal,Rate;};voidmain(){Aa1(1000.0,0.035),a2(768.0,0.028);cout<}1035,789.5041、#includeclassA{public:A(inti,intj){a=i;b=j;}voidMove(intx,inty){a+=x;b+=y;}voidShow(){cout<<”(”<private:inta,b;};classB:privateA{public:B(inti,intj,intk,intl):A(i,j){x=k;y=l;}voidShow(){cout<voidfun(){Move(3,5);}voidf1(){A::Show();}private:intx,y;};voidmain(){Ae(1,2);e.Show();Bd(3,4,5,6);d.fun();d.Show();d.f1();}(1,2)5,6(6,9)2、#includeclassB{public:B(inti){b=i+50;show();}B(){}virtualvoidshow(){cout<<”B::show()called.”<protected:intb;};classD:publicB{public:D(inti):B(i){d=i+100;show();}D(){}voidshow(){cout<<”D::show()called.”<protected:intd;};voidmain(){Dd1(108);}B::show()called.158D::show()called.208
cout<}};voidmain(){BXa(8),b(11,22);a.output();b.output();}8808111122335.虚函数实现的多态#includeclassAY{protected:inta,b;public:AY(intaa=0,intbb=0){a=aa;b=bb;}virtualvoidcompute(){cout<};classBY:publicAY{public:BY(intaa=0,intbb=0):AY(aa,bb){}voidcompute(){cout<};classCY:publicBY{public:CY(intaa=0,intbb=0):BY(aa,bb){}voidcompute(){cout<};classDY:publicAY{public:DY(intda=0,intdb=0):AY(da,db){}voidcompute(){if(b!=0)cout<elsecout<<"dixisioriszero!"<};voidmain(){intn=10,m=5;AYay(n,m);BYby(n,m);CYcy(n,m);DYdy(n,m);AY*a[4]={&ay,&by,&cy,&dy};for(inti=0;i<4;i++)a[i]->compute();AY&ax=cy;pute();AYaa=cy;pute();}10+5=1510-5=510*5=5010/5=210*5=5010+5=15一、选择填空1.在下列关键字中,用以说明类中公有成员的是()A.public;B.private;C.protected;D.friend;2.下列的各类函数中,()不是类的成员函数。A.构造函数;B.析构函数;C.友元函数;D.拷贝初始化构造函数;3.作用域运算符的功能是()。A.标识作用域的级别的;B.指出作用域的范围的;A.给定作用域的大小的;D.标识某个成员是属于哪个类的。4.()是不可能作为该类的成员的。A.自身类对象的指针;B.自身类的对象;C.自身类对象的引用;D.另一个类的对象。5.()不是构造函数的特征A.构造函数的函数名与类名相同;B.构造函数可以重载;C.构造函数可以设置缺省参数;D.构造函数必须指定类型说明。6.()是析构函数的特征。A.一个类中只能定义一个析构函数;B.析构函数与类名不同;C.析构函数的定义只能在类体内;D.析构函数可以有各个或多个参数。7.下述静态数据成员的特征中,()是错误的。A.说明静态数据成员时前边要加修饰符static;A.静态数据成员要在类体外进行初始化;B.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符;C.静态数据成员不是所有对象所共用的。8.友元的作用()。A.提高程序的运用效率;B.加强类的封装性;C.实现数据的隐藏性;D.增加成员函数的种类。分析下列程序的输出结果。1.构造函数重载#includeclassA{public:A();A(inti,intj);voidprint();private:inta,b;};A::A(){a=b=0;cout<<”Defaultconstructorcalled.\n”;}A::A(inti,intj){a=i;b=j;cout<<”Constructorcalled.\n”;}voidA::print(){cout<<”a=”<}voidmain(){Am,n(4,8);m.print();n.print();}提示:定义对象的时候调用构造函数Defaultconstructorcalled.Constructorcalled.a=0,b=0a=4,b=82.子对象#includeclassB{public:B();B(inti,intj);voidprintb();private:inta,b;};classA{public:A();A(inti,intj);voidprinta();private:Bc;};A::A(inti,intj):c(i,j){}voidA::printa(){c.printb();}B::B(inti,intj){a=i;b=j;}voidB::printb(){cout<<”a=”<}voidmain(){Am(7,9);m.printa();}a=7,b=9;3.静态成员函数,静态成员#includeclassCount{public:Count(){count++;}staticintHM(){returncount;}~Count(){count--;}private:staticintcount;};intCount::count=100;voidmain(){Countc1,c2,c3,c4;cout<:HM()<}1044.友元函数#includeclassA{public:A(doublet,doubler){Total=t;Rate=r;}frienddoubleCount(A&a){a.Total+=a.Rate*a.Total;returna.Total;}private:doubleTotal,Rate;};voidmain(){Aa1(1000.0,0.035),a2(768.0,0.028);cout<}1035,789.5041、#includeclassA{public:A(inti,intj){a=i;b=j;}voidMove(intx,inty){a+=x;b+=y;}voidShow(){cout<<”(”<private:inta,b;};classB:privateA{public:B(inti,intj,intk,intl):A(i,j){x=k;y=l;}voidShow(){cout<voidfun(){Move(3,5);}voidf1(){A::Show();}private:intx,y;};voidmain(){Ae(1,2);e.Show();Bd(3,4,5,6);d.fun();d.Show();d.f1();}(1,2)5,6(6,9)2、#includeclassB{public:B(inti){b=i+50;show();}B(){}virtualvoidshow(){cout<<”B::show()called.”<protected:intb;};classD:publicB{public:D(inti):B(i){d=i+100;show();}D(){}voidshow(){cout<<”D::show()called.”<protected:intd;};voidmain(){Dd1(108);}B::show()called.158D::show()called.208
{BXa(8),b(11,22);
a.output();
b.output();}
8808
11112233
5.虚函数实现的多态
classAY
{protected:
AY(intaa=0,intbb=0)
{a=aa;b=bb;}
virtualvoidcompute()
{cout<};classBY:publicAY{public:BY(intaa=0,intbb=0):AY(aa,bb){}voidcompute(){cout<};classCY:publicBY{public:CY(intaa=0,intbb=0):BY(aa,bb){}voidcompute(){cout<};classDY:publicAY{public:DY(intda=0,intdb=0):AY(da,db){}voidcompute(){if(b!=0)cout<elsecout<<"dixisioriszero!"<};voidmain(){intn=10,m=5;AYay(n,m);BYby(n,m);CYcy(n,m);DYdy(n,m);AY*a[4]={&ay,&by,&cy,&dy};for(inti=0;i<4;i++)a[i]->compute();AY&ax=cy;pute();AYaa=cy;pute();}10+5=1510-5=510*5=5010/5=210*5=5010+5=15一、选择填空1.在下列关键字中,用以说明类中公有成员的是()A.public;B.private;C.protected;D.friend;2.下列的各类函数中,()不是类的成员函数。A.构造函数;B.析构函数;C.友元函数;D.拷贝初始化构造函数;3.作用域运算符的功能是()。A.标识作用域的级别的;B.指出作用域的范围的;A.给定作用域的大小的;D.标识某个成员是属于哪个类的。4.()是不可能作为该类的成员的。A.自身类对象的指针;B.自身类的对象;C.自身类对象的引用;D.另一个类的对象。5.()不是构造函数的特征A.构造函数的函数名与类名相同;B.构造函数可以重载;C.构造函数可以设置缺省参数;D.构造函数必须指定类型说明。6.()是析构函数的特征。A.一个类中只能定义一个析构函数;B.析构函数与类名不同;C.析构函数的定义只能在类体内;D.析构函数可以有各个或多个参数。7.下述静态数据成员的特征中,()是错误的。A.说明静态数据成员时前边要加修饰符static;A.静态数据成员要在类体外进行初始化;B.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符;C.静态数据成员不是所有对象所共用的。8.友元的作用()。A.提高程序的运用效率;B.加强类的封装性;C.实现数据的隐藏性;D.增加成员函数的种类。分析下列程序的输出结果。1.构造函数重载#includeclassA{public:A();A(inti,intj);voidprint();private:inta,b;};A::A(){a=b=0;cout<<”Defaultconstructorcalled.\n”;}A::A(inti,intj){a=i;b=j;cout<<”Constructorcalled.\n”;}voidA::print(){cout<<”a=”<}voidmain(){Am,n(4,8);m.print();n.print();}提示:定义对象的时候调用构造函数Defaultconstructorcalled.Constructorcalled.a=0,b=0a=4,b=82.子对象#includeclassB{public:B();B(inti,intj);voidprintb();private:inta,b;};classA{public:A();A(inti,intj);voidprinta();private:Bc;};A::A(inti,intj):c(i,j){}voidA::printa(){c.printb();}B::B(inti,intj){a=i;b=j;}voidB::printb(){cout<<”a=”<}voidmain(){Am(7,9);m.printa();}a=7,b=9;3.静态成员函数,静态成员#includeclassCount{public:Count(){count++;}staticintHM(){returncount;}~Count(){count--;}private:staticintcount;};intCount::count=100;voidmain(){Countc1,c2,c3,c4;cout<:HM()<}1044.友元函数#includeclassA{public:A(doublet,doubler){Total=t;Rate=r;}frienddoubleCount(A&a){a.Total+=a.Rate*a.Total;returna.Total;}private:doubleTotal,Rate;};voidmain(){Aa1(1000.0,0.035),a2(768.0,0.028);cout<}1035,789.5041、#includeclassA{public:A(inti,intj){a=i;b=j;}voidMove(intx,inty){a+=x;b+=y;}voidShow(){cout<<”(”<private:inta,b;};classB:privateA{public:B(inti,intj,intk,intl):A(i,j){x=k;y=l;}voidShow(){cout<voidfun(){Move(3,5);}voidf1(){A::Show();}private:intx,y;};voidmain(){Ae(1,2);e.Show();Bd(3,4,5,6);d.fun();d.Show();d.f1();}(1,2)5,6(6,9)2、#includeclassB{public:B(inti){b=i+50;show();}B(){}virtualvoidshow(){cout<<”B::show()called.”<protected:intb;};classD:publicB{public:D(inti):B(i){d=i+100;show();}D(){}voidshow(){cout<<”D::show()called.”<protected:intd;};voidmain(){Dd1(108);}B::show()called.158D::show()called.208
classBY:
publicAY
{public:
BY(intaa=0,intbb=0):
AY(aa,bb){}
voidcompute()
{cout<};classCY:publicBY{public:CY(intaa=0,intbb=0):BY(aa,bb){}voidcompute(){cout<};classDY:publicAY{public:DY(intda=0,intdb=0):AY(da,db){}voidcompute(){if(b!=0)cout<elsecout<<"dixisioriszero!"<};voidmain(){intn=10,m=5;AYay(n,m);BYby(n,m);CYcy(n,m);DYdy(n,m);AY*a[4]={&ay,&by,&cy,&dy};for(inti=0;i<4;i++)a[i]->compute();AY&ax=cy;pute();AYaa=cy;pute();}10+5=1510-5=510*5=5010/5=210*5=5010+5=15一、选择填空1.在下列关键字中,用以说明类中公有成员的是()A.public;B.private;C.protected;D.friend;2.下列的各类函数中,()不是类的成员函数。A.构造函数;B.析构函数;C.友元函数;D.拷贝初始化构造函数;3.作用域运算符的功能是()。A.标识作用域的级别的;B.指出作用域的范围的;A.给定作用域的大小的;D.标识某个成员是属于哪个类的。4.()是不可能作为该类的成员的。A.自身类对象的指针;B.自身类的对象;C.自身类对象的引用;D.另一个类的对象。5.()不是构造函数的特征A.构造函数的函数名与类名相同;B.构造函数可以重载;C.构造函数可以设置缺省参数;D.构造函数必须指定类型说明。6.()是析构函数的特征。A.一个类中只能定义一个析构函数;B.析构函数与类名不同;C.析构函数的定义只能在类体内;D.析构函数可以有各个或多个参数。7.下述静态数据成员的特征中,()是错误的。A.说明静态数据成员时前边要加修饰符static;A.静态数据成员要在类体外进行初始化;B.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符;C.静态数据成员不是所有对象所共用的。8.友元的作用()。A.提高程序的运用效率;B.加强类的封装性;C.实现数据的隐藏性;D.增加成员函数的种类。分析下列程序的输出结果。1.构造函数重载#includeclassA{public:A();A(inti,intj);voidprint();private:inta,b;};A::A(){a=b=0;cout<<”Defaultconstructorcalled.\n”;}A::A(inti,intj){a=i;b=j;cout<<”Constructorcalled.\n”;}voidA::print(){cout<<”a=”<}voidmain(){Am,n(4,8);m.print();n.print();}提示:定义对象的时候调用构造函数Defaultconstructorcalled.Constructorcalled.a=0,b=0a=4,b=82.子对象#includeclassB{public:B();B(inti,intj);voidprintb();private:inta,b;};classA{public:A();A(inti,intj);voidprinta();private:Bc;};A::A(inti,intj):c(i,j){}voidA::printa(){c.printb();}B::B(inti,intj){a=i;b=j;}voidB::printb(){cout<<”a=”<}voidmain(){Am(7,9);m.printa();}a=7,b=9;3.静态成员函数,静态成员#includeclassCount{public:Count(){count++;}staticintHM(){returncount;}~Count(){count--;}private:staticintcount;};intCount::count=100;voidmain(){Countc1,c2,c3,c4;cout<:HM()<}1044.友元函数#includeclassA{public:A(doublet,doubler){Total=t;Rate=r;}frienddoubleCount(A&a){a.Total+=a.Rate*a.Total;returna.Total;}private:doubleTotal,Rate;};voidmain(){Aa1(1000.0,0.035),a2(768.0,0.028);cout<}1035,789.5041、#includeclassA{public:A(inti,intj){a=i;b=j;}voidMove(intx,inty){a+=x;b+=y;}voidShow(){cout<<”(”<private:inta,b;};classB:privateA{public:B(inti,intj,intk,intl):A(i,j){x=k;y=l;}voidShow(){cout<voidfun(){Move(3,5);}voidf1(){A::Show();}private:intx,y;};voidmain(){Ae(1,2);e.Show();Bd(3,4,5,6);d.fun();d.Show();d.f1();}(1,2)5,6(6,9)2、#includeclassB{public:B(inti){b=i+50;show();}B(){}virtualvoidshow(){cout<<”B::show()called.”<protected:intb;};classD:publicB{public:D(inti):B(i){d=i+100;show();}D(){}voidshow(){cout<<”D::show()called.”<protected:intd;};voidmain(){Dd1(108);}B::show()called.158D::show()called.208
classCY:
publicBY
CY(intaa=0,intbb=0):
BY(aa,bb){}
{cout<};classDY:publicAY{public:DY(intda=0,intdb=0):AY(da,db){}voidcompute(){if(b!=0)cout<elsecout<<"dixisioriszero!"<};voidmain(){intn=10,m=5;AYay(n,m);BYby(n,m);CYcy(n,m);DYdy(n,m);AY*a[4]={&ay,&by,&cy,&dy};for(inti=0;i<4;i++)a[i]->compute();AY&ax=cy;pute();AYaa=cy;pute();}10+5=1510-5=510*5=5010/5=210*5=5010+5=15一、选择填空1.在下列关键字中,用以说明类中公有成员的是()A.public;B.private;C.protected;D.friend;2.下列的各类函数中,()不是类的成员函数。A.构造函数;B.析构函数;C.友元函数;D.拷贝初始化构造函数;3.作用域运算符的功能是()。A.标识作用域的级别的;B.指出作用域的范围的;A.给定作用域的大小的;D.标识某个成员是属于哪个类的。4.()是不可能作为该类的成员的。A.自身类对象的指针;B.自身类的对象;C.自身类对象的引用;D.另一个类的对象。5.()不是构造函数的特征A.构造函数的函数名与类名相同;B.构造函数可以重载;C.构造函数可以设置缺省参数;D.构造函数必须指定类型说明。6.()是析构函数的特征。A.一个类中只能定义一个析构函数;B.析构函数与类名不同;C.析构函数的定义只能在类体内;D.析构函数可以有各个或多个参数。7.下述静态数据成员的特征中,()是错误的。A.说明静态数据成员时前边要加修饰符static;A.静态数据成员要在类体外进行初始化;B.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符;C.静态数据成员不是所有对象所共用的。8.友元的作用()。A.提高程序的运用效率;B.加强类的封装性;C.实现数据的隐藏性;D.增加成员函数的种类。分析下列程序的输出结果。1.构造函数重载#includeclassA{public:A();A(inti,intj);voidprint();private:inta,b;};A::A(){a=b=0;cout<<”Defaultconstructorcalled.\n”;}A::A(inti,intj){a=i;b=j;cout<<”Constructorcalled.\n”;}voidA::print(){cout<<”a=”<}voidmain(){Am,n(4,8);m.print();n.print();}提示:定义对象的时候调用构造函数Defaultconstructorcalled.Constructorcalled.a=0,b=0a=4,b=82.子对象#includeclassB{public:B();B(inti,intj);voidprintb();private:inta,b;};classA{public:A();A(inti,intj);voidprinta();private:Bc;};A::A(inti,intj):c(i,j){}voidA::printa(){c.printb();}B::B(inti,intj){a=i;b=j;}voidB::printb(){cout<<”a=”<}voidmain(){Am(7,9);m.printa();}a=7,b=9;3.静态成员函数,静态成员#includeclassCount{public:Count(){count++;}staticintHM(){returncount;}~Count(){count--;}private:staticintcount;};intCount::count=100;voidmain(){Countc1,c2,c3,c4;cout<:HM()<}1044.友元函数#includeclassA{public:A(doublet,doubler){Total=t;Rate=r;}frienddoubleCount(A&a){a.Total+=a.Rate*a.Total;returna.Total;}private:doubleTotal,Rate;};voidmain(){Aa1(1000.0,0.035),a2(768.0,0.028);cout<}1035,789.5041、#includeclassA{public:A(inti,intj){a=i;b=j;}voidMove(intx,inty){a+=x;b+=y;}voidShow(){cout<<”(”<private:inta,b;};classB:privateA{public:B(inti,intj,intk,intl):A(i,j){x=k;y=l;}voidShow(){cout<voidfun(){Move(3,5);}voidf1(){A::Show();}private:intx,y;};voidmain(){Ae(1,2);e.Show();Bd(3,4,5,6);d.fun();d.Show();d.f1();}(1,2)5,6(6,9)2、#includeclassB{public:B(inti){b=i+50;show();}B(){}virtualvoidshow(){cout<<”B::show()called.”<protected:intb;};classD:publicB{public:D(inti):B(i){d=i+100;show();}D(){}voidshow(){cout<<”D::show()called.”<protected:intd;};voidmain(){Dd1(108);}B::show()called.158D::show()called.208
classDY:
DY(intda=0,intdb=0):
AY(da,db){}
{if(b!
=0)
cout<elsecout<<"dixisioriszero!"<};voidmain(){intn=10,m=5;AYay(n,m);BYby(n,m);CYcy(n,m);DYdy(n,m);AY*a[4]={&ay,&by,&cy,&dy};for(inti=0;i<4;i++)a[i]->compute();AY&ax=cy;pute();AYaa=cy;pute();}10+5=1510-5=510*5=5010/5=210*5=5010+5=15一、选择填空1.在下列关键字中,用以说明类中公有成员的是()A.public;B.private;C.protected;D.friend;2.下列的各类函数中,()不是类的成员函数。A.构造函数;B.析构函数;C.友元函数;D.拷贝初始化构造函数;3.作用域运算符的功能是()。A.标识作用域的级别的;B.指出作用域的范围的;A.给定作用域的大小的;D.标识某个成员是属于哪个类的。4.()是不可能作为该类的成员的。A.自身类对象的指针;B.自身类的对象;C.自身类对象的引用;D.另一个类的对象。5.()不是构造函数的特征A.构造函数的函数名与类名相同;B.构造函数可以重载;C.构造函数可以设置缺省参数;D.构造函数必须指定类型说明。6.()是析构函数的特征。A.一个类中只能定义一个析构函数;B.析构函数与类名不同;C.析构函数的定义只能在类体内;D.析构函数可以有各个或多个参数。7.下述静态数据成员的特征中,()是错误的。A.说明静态数据成员时前边要加修饰符static;A.静态数据成员要在类体外进行初始化;B.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符;C.静态数据成员不是所有对象所共用的。8.友元的作用()。A.提高程序的运用效率;B.加强类的封装性;C.实现数据的隐藏性;D.增加成员函数的种类。分析下列程序的输出结果。1.构造函数重载#includeclassA{public:A();A(inti,intj);voidprint();private:inta,b;};A::A(){a=b=0;cout<<”Defaultconstructorcalled.\n”;}A::A(inti,intj){a=i;b=j;cout<<”Constructorcalled.\n”;}voidA::print(){cout<<”a=”<}voidmain(){Am,n(4,8);m.print();n.print();}提示:定义对象的时候调用构造函数Defaultconstructorcalled.Constructorcalled.a=0,b=0a=4,b=82.子对象#includeclassB{public:B();B(inti,intj);voidprintb();private:inta,b;};classA{public:A();A(inti,intj);voidprinta();private:Bc;};A::A(inti,intj):c(i,j){}voidA::printa(){c.printb();}B::B(inti,intj){a=i;b=j;}voidB::printb(){cout<<”a=”<}voidmain(){Am(7,9);m.printa();}a=7,b=9;3.静态成员函数,静态成员#includeclassCount{public:Count(){count++;}staticintHM(){returncount;}~Count(){count--;}private:staticintcount;};intCount::count=100;voidmain(){Countc1,c2,c3,c4;cout<:HM()<}1044.友元函数#includeclassA{public:A(doublet,doubler){Total=t;Rate=r;}frienddoubleCount(A&a){a.Total+=a.Rate*a.Total;returna.Total;}private:doubleTotal,Rate;};voidmain(){Aa1(1000.0,0.035),a2(768.0,0.028);cout<}1035,789.5041、#includeclassA{public:A(inti,intj){a=i;b=j;}voidMove(intx,inty){a+=x;b+=y;}voidShow(){cout<<”(”<private:inta,b;};classB:privateA{public:B(inti,intj,intk,intl):A(i,j){x=k;y=l;}voidShow(){cout<voidfun(){Move(3,5);}voidf1(){A::Show();}private:intx,y;};voidmain(){Ae(1,2);e.Show();Bd(3,4,5,6);d.fun();d.Show();d.f1();}(1,2)5,6(6,9)2、#includeclassB{public:B(inti){b=i+50;show();}B(){}virtualvoidshow(){cout<<”B::show()called.”<protected:intb;};classD:publicB{public:D(inti):B(i){d=i+100;show();}D(){}voidshow(){cout<<”D::show()called.”<protected:intd;};voidmain(){Dd1(108);}B::show()called.158D::show()called.208
elsecout<<"dixisioriszero!
"<};voidmain(){intn=10,m=5;AYay(n,m);BYby(n,m);CYcy(n,m);DYdy(n,m);AY*a[4]={&ay,&by,&cy,&dy};for(inti=0;i<4;i++)a[i]->compute();AY&ax=cy;pute();AYaa=cy;pute();}10+5=1510-5=510*5=5010/5=210*5=5010+5=15一、选择填空1.在下列关键字中,用以说明类中公有成员的是()A.public;B.private;C.protected;D.friend;2.下列的各类函数中,()不是类的成员函数。A.构造函数;B.析构函数;C.友元函数;D.拷贝初始化构造函数;3.作用域运算符的功能是()。A.标识作用域的级别的;B.指出作用域的范围的;A.给定作用域的大小的;D.标识某个成员是属于哪个类的。4.()是不可能作为该类的成员的。A.自身类对象的指针;B.自身类的对象;C.自身类对象的引用;D.另一个类的对象。5.()不是构造函数的特征A.构造函数的函数名与类名相同;B.构造函数可以重载;C.构造函数可以设置缺省参数;D.构造函数必须指定类型说明。6.()是析构函数的特征。A.一个类中只能定义一个析构函数;B.析构函数与类名不同;C.析构函数的定义只能在类体内;D.析构函数可以有各个或多个参数。7.下述静态数据成员的特征中,()是错误的。A.说明静态数据成员时前边要加修饰符static;A.静态数据成员要在类体外进行初始化;B.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符;C.静态数据成员不是所有对象所共用的。8.友元的作用()。A.提高程序的运用效率;B.加强类的封装性;C.实现数据的隐藏性;D.增加成员函数的种类。分析下列程序的输出结果。1.构造函数重载#includeclassA{public:A();A(inti,intj);voidprint();private:inta,b;};A::A(){a=b=0;cout<<”Defaultconstructorcalled.\n”;}A::A(inti,intj){a=i;b=j;cout<<”Constructorcalled.\n”;}voidA::print(){cout<<”a=”<}voidmain(){Am,n(4,8);m.print();n.print();}提示:定义对象的时候调用构造函数Defaultconstructorcalled.Constructorcalled.a=0,b=0a=4,b=82.子对象#includeclassB{public:B();B(inti,intj);voidprintb();private:inta,b;};classA{public:A();A(inti,intj);voidprinta();private:Bc;};A::A(inti,intj):c(i,j){}voidA::printa(){c.printb();}B::B(inti,intj){a=i;b=j;}voidB::printb(){cout<<”a=”<}voidmain(){Am(7,9);m.printa();}a=7,b=9;3.静态成员函数,静态成员#includeclassCount{public:Count(){count++;}staticintHM(){returncount;}~Count(){count--;}private:staticintcount;};intCount::count=100;voidmain(){Countc1,c2,c3,c4;cout<:HM()<}1044.友元函数#includeclassA{public:A(doublet,doubler){Total=t;Rate=r;}frienddoubleCount(A&a){a.Total+=a.Rate*a.Total;returna.Total;}private:doubleTotal,Rate;};voidmain(){Aa1(1000.0,0.035),a2(768.0,0.028);cout<}1035,789.5041、#includeclassA{public:A(inti,intj){a=i;b=j;}voidMove(intx,inty){a+=x;b+=y;}voidShow(){cout<<”(”<private:inta,b;};classB:privateA{public:B(inti,intj,intk,intl):A(i,j){x=k;y=l;}voidShow(){cout<voidfun(){Move(3,5);}voidf1(){A::Show();}private:intx,y;};voidmain(){Ae(1,2);e.Show();Bd(3,4,5,6);d.fun();d.Show();d.f1();}(1,2)5,6(6,9)2、#includeclassB{public:B(inti){b=i+50;show();}B(){}virtualvoidshow(){cout<<”B::show()called.”<protected:intb;};classD:publicB{public:D(inti):B(i){d=i+100;show();}D(){}voidshow(){cout<<”D::show()called.”<protected:intd;};voidmain(){Dd1(108);}B::show()called.158D::show()called.208
{intn=10,m=5;
AYay(n,m);BYby(n,m);
CYcy(n,m);DYdy(n,m);
AY*a[4]={&ay,&by,&cy,&dy};
for(inti=0;i<4;i++)
a[i]->compute();
AY&ax=cy;pute();
AYaa=cy;pute();
10+5=15
10-5=5
10*5=50
10/5=2
一、选择填空
1.在下列关键字中,用以说明类中公有成员的是()
A.public;B.private;C.protected;D.friend;
2.下列的各类函数中,()不是类的成员函数。
A.构造函数;B.析构函数;C.友元函数;D.拷贝初始化构造函数;
3.作用域运算符的功能是()。
A.标识作用域的级别的;B.指出作用域的范围的;
A.给定作用域的大小的;D.标识某个成员是属于哪个类的。
4.()是不可能作为该类的成员的。
A.自身类对象的指针;B.自身类的对象;
C.自身类对象的引用;D.另一个类的对象。
5.()不是构造函数的特征
A.构造函数的函数名与类名相同;
B.构造函数可以重载;
C.构造函数可以设置缺省参数;
D.构造函数必须指定类型说明。
6.()是析构函数的特征。
A.一个类中只能定义一个析构函数;
B.析构函数与类名不同;
C.析构函数的定义只能在类体内;
D.析构函数可以有各个或多个参数。
7.下述静态数据成员的特征中,()是错误的。
A.说明静态数据成员时前边要加修饰符static;
A.静态数据成员要在类体外进行初始化;
B.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符;
C.静态数据成员不是所有对象所共用的。
8.友元的作用()。
A.提高程序的运用效率;
B.加强类的封装性;
C.实现数据的隐藏性;
D.增加成员函数的种类。
分析下列程序的输出结果。
1.构造函数重载
classA{
A();
A(inti,intj);
voidprint();
private:
A:
A()
a=b=0;
cout<<”Defaultconstructorcalled.\n”;
A(inti,intj)
a=i;
b=j;
cout<<”Constructorcalled.\n”;
voidA:
print()
cout<<”a=”<}voidmain(){Am,n(4,8);m.print();n.print();}提示:定义对象的时候调用构造函数Defaultconstructorcalled.Constructorcalled.a=0,b=0a=4,b=82.子对象#includeclassB{public:B();B(inti,intj);voidprintb();private:inta,b;};classA{public:A();A(inti,intj);voidprinta();private:Bc;};A::A(inti,intj):c(i,j){}voidA::printa(){c.printb();}B::B(inti,intj){a=i;b=j;}voidB::printb(){cout<<”a=”<}voidmain(){Am(7,9);m.printa();}a=7,b=9;3.静态成员函数,静态成员#includeclassCount{public:Count(){count++;}staticintHM(){returncount;}~Count(){count--;}private:staticintcount;};intCount::count=100;voidmain(){Countc1,c2,c3,c4;cout<:HM()<}1044.友元函数#includeclassA{public:A(doublet,doubler){Total=t;Rate=r;}frienddoubleCount(A&a){a.Total+=a.Rate*a.Total;returna.Total;}private:doubleTotal,Rate;};voidmain(){Aa1(1000.0,0.035),a2(768.0,0.028);cout<}1035,789.5041、#includeclassA{public:A(inti,intj){a=i;b=j;}voidMove(intx,inty){a+=x;b+=y;}voidShow(){cout<<”(”<private:inta,b;};classB:privateA{public:B(inti,intj,intk,intl):A(i,j){x=k;y=l;}voidShow(){cout<voidfun(){Move(3,5);}voidf1(){A::Show();}private:intx,y;};voidmain(){Ae(1,2);e.Show();Bd(3,4,5,6);d.fun();d.Show();d.f1();}(1,2)5,6(6,9)2、#includeclassB{public:B(inti){b=i+50;show();}B(){}virtualvoidshow(){cout<<”B::show()called.”<protected:intb;};classD:publicB{public:D(inti):B(i){d=i+100;show();}D(){}voidshow(){cout<<”D::show()called.”<protected:intd;};voidmain(){Dd1(108);}B::show()called.158D::show()called.208
Am,n(4,8);
m.print();
n.print();
提示:
定义对象的时候调用构造函数
Defaultconstructorcalled.
Constructorcalled.
a=0,b=0
a=4,b=8
2.子对象
classB{
B();
B(inti,intj);
voidprintb();
voidprinta();
Bc;
A(inti,intj):
c(i,j)
{}
printa()
c.printb();
B:
B(inti,intj)
voidB:
printb()
cout<<”a=”<}voidmain(){Am(7,9);m.printa();}a=7,b=9;3.静态成员函数,静态成员#includeclassCount{public:Count(){count++;}staticintHM(){returncount;}~Count(){count--;}private:staticintcount;};intCount::count=100;voidmain(){Countc1,c2,c3,c4;cout<:HM()<}1044.友元函数#includeclassA{public:A(doublet,doubler){Total=t;Rate=r;}frienddoubleCount(A&a){a.Total+=a.Rate*a.Total;returna.Total;}private:doubleTotal,Rate;};voidmain(){Aa1(1000.0,0.035),a2(768.0,0.028);cout<}1035,789.5041、#includeclassA{public:A(inti,intj){a=i;b=j;}voidMove(intx,inty){a+=x;b+=y;}voidShow(){cout<<”(”<private:inta,b;};classB:privateA{public:B(inti,intj,intk,intl):A(i,j){x=k;y=l;}voidShow(){cout<voidfun(){Move(3,5);}voidf1(){A::Show();}private:intx,y;};voidmain(){Ae(1,2);e.Show();Bd(3,4,5,6);d.fun();d.Show();d.f1();}(1,2)5,6(6,9)2、#includeclassB{public:B(inti){b=i+50;show();}B(){}virtualvoidshow(){cout<<”B::show()called.”<protected:intb;};classD:publicB{public:D(inti):B(i){d=i+100;show();}D(){}voidshow(){cout<<”D::show()called.”<protected:intd;};voidmain(){Dd1(108);}B::show()called.158D::show()called.208
Am(7,9);
m.printa();
a=7,b=9;
3.静态成员函数,静态成员
classCount
Count(){count++;}
staticintHM(){returncount;}
~Count(){count--;}
staticintcount;
intCount:
count=100;
Countc1,c2,c3,c4;
cout<:HM()<}1044.友元函数#includeclassA{public:A(doublet,doubler){Total=t;Rate=r;}frienddoubleCount(A&a){a.Total+=a.Rate*a.Total;returna.Total;}private:doubleTotal,Rate;};voidmain(){Aa1(1000.0,0.035),a2(768.0,0.028);cout<}1035,789.5041、#includeclassA{public:A(inti,intj){a=i;b=j;}voidMove(intx,inty){a+=x;b+=y;}voidShow(){cout<<”(”<private:inta,b;};classB:privateA{public:B(inti,intj,intk,intl):A(i,j){x=k;y=l;}voidShow(){cout<voidfun(){Move(3,5);}voidf1(){A::Show();}private:intx,y;};voidmain(){Ae(1,2);e.Show();Bd(3,4,5,6);d.fun();d.Show();d.f1();}(1,2)5,6(6,9)2、#includeclassB{public:B(inti){b=i+50;show();}B(){}virtualvoidshow(){cout<<”B::show()called.”<protected:intb;};classD:publicB{public:D(inti):B(i){d=i+100;show();}D(){}voidshow(){cout<<”D::show()called.”<protected:intd;};voidmain(){Dd1(108);}B::show()called.158D::show()called.208
HM()<}1044.友元函数#includeclassA{public:A(doublet,doubler){Total=t;Rate=r;}frienddoubleCount(A&a){a.Total+=a.Rate*a.Total;returna.Total;}private:doubleTotal,Rate;};voidmain(){Aa1(1000.0,0.035),a2(768.0,0.028);cout<}1035,789.5041、#includeclassA{public:A(inti,intj){a=i;b=j;}voidMove(intx,inty){a+=x;b+=y;}voidShow(){cout<<”(”<private:inta,b;};classB:privateA{public:B(inti,intj,intk,intl):A(i,j){x=k;y=l;}voidShow(){cout<voidfun(){Move(3,5);}voidf1(){A::Show();}private:intx,y;};voidmain(){Ae(1,2);e.Show();Bd(3,4,5,6);d.fun();d.Show();d.f1();}(1,2)5,6(6,9)2、#includeclassB{public:B(inti){b=i+50;show();}B(){}virtualvoidshow(){cout<<”B::show()called.”<protected:intb;};classD:publicB{public:D(inti):B(i){d=i+100;show();}D(){}voidshow(){cout<<”D::show()called.”<protected:intd;};voidmain(){Dd1(108);}B::show()called.158D::show()called.208
104
4.友元函数
classA
A(doublet,doubler){Total=t;Rate=r;}
frienddoubleCount(A&a)
a.Total+=a.Rate*a.Total;
returna.Total;
doubleTotal,Rate;
Aa1(1000.0,0.035),a2(768.0,0.028);
cout<}1035,789.5041、#includeclassA{public:A(inti,intj){a=i;b=j;}voidMove(intx,inty){a+=x;b+=y;}voidShow(){cout<<”(”<private:inta,b;};classB:privateA{public:B(inti,intj,intk,intl):A(i,j){x=k;y=l;}voidShow(){cout<voidfun(){Move(3,5);}voidf1(){A::Show();}private:intx,y;};voidmain(){Ae(1,2);e.Show();Bd(3,4,5,6);d.fun();d.Show();d.f1();}(1,2)5,6(6,9)2、#includeclassB{public:B(inti){b=i+50;show();}B(){}virtualvoidshow(){cout<<”B::show()called.”<protected:intb;};classD:publicB{public:D(inti):B(i){d=i+100;show();}D(){}voidshow(){cout<<”D::show()called.”<protected:intd;};voidmain(){Dd1(108);}B::show()called.158D::show()called.208
1035,789.504
1、
A(inti,intj){a=i;b=j;}
voidMove(intx,inty){a+=x;b+=y;}
voidShow(){cout<<”(”<private:inta,b;};classB:privateA{public:B(inti,intj,intk,intl):A(i,j){x=k;y=l;}voidShow(){cout<voidfun(){Move(3,5);}voidf1(){A::Show();}private:intx,y;};voidmain(){Ae(1,2);e.Show();Bd(3,4,5,6);d.fun();d.Show();d.f1();}(1,2)5,6(6,9)2、#includeclassB{public:B(inti){b=i+50;show();}B(){}virtualvoidshow(){cout<<”B::show()called.”<protected:intb;};classD:publicB{public:D(inti):B(i){d=i+100;show();}D(){}voidshow(){cout<<”D::show()called.”<protected:intd;};voidmain(){Dd1(108);}B::show()called.158D::show()called.208
classB:
privateA
B(inti,intj,intk,intl):
A(i,j){x=k;y=l;}
voidShow(){cout<voidfun(){Move(3,5);}voidf1(){A::Show();}private:intx,y;};voidmain(){Ae(1,2);e.Show();Bd(3,4,5,6);d.fun();d.Show();d.f1();}(1,2)5,6(6,9)2、#includeclassB{public:B(inti){b=i+50;show();}B(){}virtualvoidshow(){cout<<”B::show()called.”<protected:intb;};classD:publicB{public:D(inti):B(i){d=i+100;show();}D(){}voidshow(){cout<<”D::show()called.”<protected:intd;};voidmain(){Dd1(108);}B::show()called.158D::show()called.208
voidfun(){Move(3,5);}
voidf1(){A:
Show();}
intx,y;
Ae(1,2);
e.Show();
Bd(3,4,5,6);
d.fun();
d.Show();
d.f1();
(1,2)
5,6
(6,9)
2、
classB
B(inti){b=i+50;show();}
B(){}
virtualvoidshow(){cout<<”B:
show()called.”<
protected:
intb;
classD:
publicB
D(inti):
B(i){d=i+100;show();}
D(){}
voidshow(){cout<<”D:
show()called.”<protected:intd;};voidmain(){Dd1(108);}B::show()called.158D::show()called.208
intd;
Dd1(108);
show()called.158
D:
show()called.208
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2