}
答案:
M=3
N=2
2.4编写程序
36.编写一个函数,该函数返回给定字符串大写字母字符的个数。
例如,字符串“ChineseComputerWrold”中,大写字母字符的个数为3个。
37.编写一个函数,求输入的两个自然数的最大公约数。
38.编写一个函数Strlen(char*s),求字符串s的长度,并进行测试。
类与对象
3.1选择题
39.对类的构造函数和析构函数描述正确的是A。
A)构造函数可以重载,析构函数不能重载
B)构造函数不能重载,析构函数可以重载
C)构造函数可以重载,析构函数也可以重载
D)构造函数不能重载,析构函数也不能重载
40.下面对于友元函数描述正确的是C。
A)友元函数的实现必须在类的内部定义
B)友元函数时类的成员函数
C)友元函数破坏了类的封装性和隐蔽性
D)友元函数不能访问类的私有成员
41.下面对静态数据成员的描述中,正确的是D。
A)静态数据成员可以在类体内进行初始化
B)静态数据成员不可以被类的对象调用
C)静态数据成员不能受private控制符的作用
D)静态数据成员可以直接用类名调用
3.2填空题
42.在C语言中,编程的单位是函数;在C++语言中,编程的单位是类。
43.在结构定义中,数据和成员函数默认权限是公有(public)。
在类定义中,数据和成员函数默认权限是私有(private)。
44.new运算符对指定类型对象动态分配内存并返回该类型的指针。
45.非成员函数应声明为类的友元函数才能访问这个类的private成员。
46.完成下面的类定义。
ClassMyClass
{
Public;
MyClass(){x=0;}
friendIntGetNum(MyClassmy);
Private;
Intx;
};
IntGetNum(MyClassmy)
{
Returnmy.x;
}
3.3阅读程序
47.阅读下面类的定义,找出程序中的错误,并说明错误原因。
Classmy
{
Public;
Mya;
Private;
Intx;
};
答案:
语句Mya;错误。
编译器在处理一个定义性声明的类时,在没有遇到标识声明结束的右花括号之前,所声明的类名是引用性声明。
引用性声明的类名不能用于那些导致建立对象的声明中。
这是因为对应程序中声明的每一个对象,编译器都要确定存储的布局。
3.4编写程序
48.设计一个类CRectangle,要求如下所述。
(1)该类中的私有成员变量存放Rectangle的长和宽,并且设置它们的默认值是1.
(2)通过成员函数设置其长和宽,并确保长和宽都在(0,50)范围之内。
(3)求周长Perimeter。
49.定义一个类Student记录学生计算机课程的成绩。
要求使用静态成员变量或静态成员函数计算全班学生计算机课程的总成绩和平均成绩。
类与对象的高级操作
4.1选择题
50.假定MyClass为一个类,则执行MyClassa[3],*p[2];语句时,自动调用该类构造函数B次
A)2B)3C)4D)5
类MyClass的定义如下:
ClassMyClass
{
Public;
MyClass(){}
MyClass(inti){value=newint(i);}
Int*value;
};
51.若要对value赋值,则下面语句正确的是D。
A)MyClassmy;my.value=10;
B)MyClassmy;*my.value=10;
C)MyClassmy;my.*value=10;
D)MyClassmy(10)
52.关于new运算符的错误的描述是A。
A)使用运算符new创建对象数组必须定义初始值
B)使用运算符new创建对象时,会调用类的构造函数
C)运算符new可以用来动态创建对象和对象数值
D)使用new运算符创建的对象可以使用运算符delete删除
4.2填空题
53.常量对象应初始化,并且不能在生成之后修改。
54.指向数组的指针是指该指针指向一个数组。
55.有如下定义语句:
MyClassp[10];则系统自动调用该类构造函数10次。
当类对象数组p离开它的作用域时,系统自动调用该类析构函数10次。
4.3阅读程序
56.写出下列程序的运行结果。
#include
classMY_CLASS
{
Public:
VoidDisplayMessage(constchar*Text,intType)
{
Cout<<"Message:
Text="<Cout<<"Text="<}
VoidDisplayMessage(constchar*Text,unsignedintType)
{
Cout<<"Message:
Text="<Cout<<"Text="<}
};
Voidmain()
{
Unsignedcharvalue=0;
MyClassmy;
My.DisplayMessage("Hello!
",value);
}
答案:
Message:
TextoHello!
Text=10
57.写出下列程序的运行结果。
#include
classMYClass
{
Public:
MyClass(inta){x=a;}
VoidFun1{x++;}
VoidFun2{x+=2;}
VoidFun3{x+=3;}
VoidPrint(){cout<<"x="<Private:
Intx;
};
Voidmain()
{
MyClassmy(8);
Void(MyClass:
:
*pf)();
My,Print();
Pf=MyClass:
:
Fun1;
(my,*pf)();
My,Print();
Pf=MyClass:
:
Fun2;
(my,*pf)();
My,Print();
Pf=MyClass:
:
Fun3;
(my,*pf)();
My,Print();
}
答案:
X=8
X=9
X=11
X=14
运算符重载
5.1选择题
58.下了运算符中,A运算符在C++中不能重载。
A)?
:
B)[]C)newD)&&
59.下面对C++运算符的正确的描述是D。
A)只有类成员运算符B)只有友元运算符
C)只有非成员和非友元运算符D)上述三者都有
60.下列关于运算符重载的描述中,正确的是D。
A)运算符重载可以改变运算符的操作数的个数
B)运算符重载可以改变优先级
C)运算符重载可以改变结合性
D)运算符重载不可以改变语法结构
5.2填空题
61.单目运算符作为类成员函数重载时没有行参;双目运算符作为类成员函数重载时需要声明其右操作数,作为友元函数重载时需声明全部操作数。
62.利用成员函数对二元运算符重载,其左操作数为this指针,右操作数为成员函数参数。
63.通过重载函数调用运算符实现下列数字函数的抽象:
F(x,y)=ax2+by+c
继承与派生
6.1选择题
64.C++语言建立类族是通过C实现的。
A)类的嵌套B)虚函数C)类的继承D)抽象类
65.下列对基类和派生类关系的描述中,错误的是B。
A)派生类是基类的具体化B)派生类是基类的子集
C)派生类是基类定义的延续D)派生类是基类的组合
66.派生类的对象对它的基类成员中A是可以访问的。
A)公有继承的公有成员B)公有继承的私有成员
C)公有继承的保护成员D)私有继承的公有成员
67.派生类的构造函数的成员初始化列表中,不能包含C。
A)基类的构造函数B)派生类中子对象的初始化
C)基类中子对象的初始化D)派生类中一般数据成员的初始化
68.带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样将对虚基类的子对象初始化D
A)与虚基类下面的派生类个数有关B)多次C)两次D)一次
69.下面叙述错误的是C。
A)派生类可以使用private派生B)对基类成员的访问必须是无二义性的
C)基类成员的访问能力在派生类中维持不变D)赋值兼容规则也适用于多继承的组合
6.2填空题
70.派生类可以调用其基类中不具备的数据和操作。
71.C++提供的多继承机制允许一个派生类继承多个基类,即使这些基类是相互无关的。
72.当用protected继承从基类派生一个类时,基类的public成员成为派生类的保护protected成员,protected成员成为派生类的保护protectde成员。
73.当撤销一个含有基类和子对象成员的派生类对象时,将首先完成派生类的析构函数定义体的执行,接着完成子对象成员的析构函数定义体的执行,最后完成基类的析构函数定义体的执行。
74.指向基类的对象的指针变量也可以指向派生类的对象。
6.3阅读程序
75.写出下列程序的运行结果。
#include
#include
ClassBase
{
Public:
Intx;
VoidPrint(){cout<<”Base:
:
xis”<};
ClassDerivde1:
publicBase
{
Public:
VoidPrint(){}
};
ClassDerivde2:
privateBase
{
Public:
Derivde2(){Base:
:
x=4;}
Intx;
VoidPrint()
{
cout<<”Derived2’sBase:
:
xis”<:
x<cout<<”Derived2:
:
xis”<}
};
Voidmain()
{
BaseobjB;
Derived1objD1;
Derived2objD2;
objD2.x=1+(objD1.x=1+(objB.x=1));
objB.Print();
objD1.Print();
objD2.Print();
}
答案:
Basw:
:
xis1
Derivde1:
:
xis2
Derivde2’sBase:
:
xis4
Derivde2:
:
xis3
多态性
7.1选择题
76.下列关于动态联编的描述中,错误的是D。
A)动态联编是以虚函数为基础的
B)动态联编是在运行时确定所调用的函数代码的
C)动态联编调用函数操作是指向对象的指针或对象引用
D)动态联编是在编译时确定操作函数的
77.编译时的多态性可以通过使用C获得。
A)虚函数和指针B)重载函数和析构函数
C)虚函数和对象D)虚函数和引用
78.关于虚函数和抽象类的描述中,错误的是C。
A)纯虚函数是一种特殊的虚函数,它没有具体的实现
B)抽象类是指具有纯虚函数的类
C)一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类
D)抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出
79.下面的描述中,正确的是A
A)virtual可以用来声明虚函数
B)含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类
C)即使基类的构造函数没有参数,派生类也必须建立构造函数
D)静态数据成员可以通过成员初始化列表来初始化
7.2填空题
80.静态联编所支持的多态性称为编译时的(静态)多态性,动态联编所支持的多态性则称为运行时的(动态)多态性,动态多态性由虚函数来支持。
81.C++中不支持虚构造函数,但支持虚析构函数。
7.3阅读程序
82.写出下列程序的运行结果。
#include
ClassBase
{
Public:
Base(inti=1):
x(i){}
Virtualintsum()const{returnx;}
Private:
Intx;
};
ClassDerived:
publicBase
{
Public:
Derived(inti=0,intj=0):
Base(i),y(j){}
Intsum()const{returnBase:
:
sum()+y;}
Private:
Inty;
};
VoidCall(Baseb)
{
Cout<<"sum="<}
Voidmain()
{
Baseb(10);
Derivedd(10,40);
Call(b);
Call(d);
}
答案:
Sum=10
Sum=10
83.写出下列程序的运行结果。
#include
ClassBase
{
Public:
Base(){cout<<"ConstructorofBase."<Virtualvoidfun(){cout<<"Base:
:
fun()called."<};
ClassDerived:
publicBase
{
Public:
Derived(){cout<<"