};
main()
{
AobjA;
objA.out();
}
p106
26.
#include
classA{
intA1;
public:
intA2;
};
classB:
publicA{
intB1;
public:
intB2;
voidset()
{A1=1;A2=2;B1=3;B2=4;}
};
voidmain()
{
BobjB;
objB.set();
}
七、编程题
28.定义一个复数类Complex,定义带有2个参数(都为缺省参数)的构造函数;重载“/”(成员函数实现);重载“<<”(友元函数实现)。
补充
一、单项选择题
1.关于缺省参数,下列原型不正确的为()
A.intf(intx=0,inty)B.intf(intx,inty=0)
C.intf(intx=10)D.intf(intx,inty=0,intz=0)
2.若有Xobj,*p;p=&obj;(f是类X的一个无参的非static公有成员函数),则调用不正确的是()
A.obj.f()B.p->f()C.(*p).f()D.*p->f()
3.区分同名函数,晚期匹配为()
A.根据参数表区分B.根据对象区分
C.根据类名区分D.虚函数
4.关于空类,说法不正确的是()
A.空类没有类名B.空类没有成员函数
C.空类没有数据成员D.可以定义空类的对象
p90
5.若有floatf=1.8;inti=(int)f;则f的值为()
A.1B.2C.1.8D.不确定
二、多项选择题
1.不能使用友元函数重载的运算符有()
A.*B.=C.()D.+E.[]
p186
2.区分同名函数,早期匹配是()
A.根据参数表区分B.根据类名区分C.根据不同类的对象区分
D.根据虚函数区分E.根据不同类对象的指针区分
3.可以实现封装的关键字是()
A.classB.structC.friendD.unionE.enum
4.友元函数重载++(前缀重载),为保证隐式调用的正确性,说法不正确的是()
A.不使用类类型作参数类型B.用对象本身作参数
C.用对象指针作参数D.用对象引用作参数
E.没有参数
5.不能有参数的函数是()
A.构造函数B.析构函数C.类类型转换函数
D.静态成员函数E.友元函数
三、名词解释
1.类类型转换函数
2.缺省参数(默认参数)
p54
3.抽象类
p174
4.构造函数
p75
5.缺省构造函数
p75
四、判断分析题
1.不可以定义抽象类的对象()
p174
2.C++语言中的任何函数都必须有函数体,即函数的实现()
p173
3.this指针在类的所有成员函数中都隐含存在()
p107
4.class类和struct类没有区别()
p32
5.C++定义的模板有函数模板和类模板两大类()
6.可以定义空类的对象()
五、读程序
1.
#include
classA{
inta;
public:
A(intx=0){a=x;}
voidput(){cout<voidset1(intx,Aobj){obj.a=x;}
voidset2(intx,A&obj){obj.a=x;}
voidset3(intx,A*obj){obj->a=x;}
};
main(){
AobjA
(1);
objA.put();
objA.set2(2,objA);
objA.put();
objA.set1(3,objA);
objA.put();
objA.set3(4,&objA);
objA.put();
}
2.
#include
classA{
public:
A(){cout<<"Aiscreated\n";}
};
classB:
publicA{
public:
B(){cout<<"Biscreated\n";}
};
classC:
publicB{
public:
C(){cout<<"Ciscreated\n";}
};
main(){
AobjA;
BobjB;
CobjC;
}
六、指出下列程序的错误;说明错误的原因;并改正
1.
#include
classA{
inta;
public:
A(intx){a=x;}
voidset()const
{a=1;}
voidput(){cout<};
main()
{
AobjA(10);
objA.set(100);
objA.put();
}
p114
2.
#include
classX{
public:
intx;
X(inta){x=a;}
};
classY:
X{
public:
inty;
Y(intb){y=b;}
};
main()
{
XobjX
(1);
YobjY=2;
}
3.
#include
classA
{
inta=1;
staticintb=2;
};
main()
{
AobjA;
cout<:
a;
}
p71
p107
4.
#include
classA
{
inta;
staticints;
public:
A(intx){a=x;}
voidset(){a=1;s=2;}
voidput(){cout<
};
main()
{
AobjA(10);
cout<cout<:
a;
objA.put();
}
七、编程题
1.继承派生、纯虚函数、函数重载
定义一个图形shape基类,数据成员为2个整数(表示图形的边界),有带参数的构造函数,有计算面积的虚函数GetArea(),在此基础上派生出三角形类Rectangle和圆Circle类,使用Rectangle类在创建一个派生类Square。
三个派生类都有重载的GetArea()函数。
2.运算符重载
定义一个复数类Complex,派生出一个极坐标中的点类Vector,要求复数类重载*(成员函数实现),Vector类重载++(友元函数实现),Vector类重载<<。
3.函数模板