};
void main()
{
point p1;
point *p;
p=&p1;
(); ______________//通过对象p1访问show函数
p->show() ;//通过指针p访问show函数
}
21、 在C++类中可以包含___公有___________、___私有 ___________和_____保护
_________三种具有不同访问控制权的成员。
22、 定义类时,在类头中将使用关键字____class_________来表示类定义的开始。
如果一个类中至少有一个纯虚函数,则该类称为______抽象类 __________。
23、
24、
25、
C++类的组成包括数据成员和______成员函数________,友元_____不是 (是、不
友员函数是用关键字______friend ______修饰的非成员函数。
若有:
int i;
int &j=i;
i=10;
j=i+1;
则i=11,j=11。
new的功能是动态申请内存空间,delete的功能是释放由new申请的空间。
是)该类的成员函数。
26、
二.选择题
1 建立派生类对象时,3种构造函数分别是a(基类的构造函数)、b(成员对象的构造函数)、c
(派生类的构造函数),这3种构造函数的调用顺序为()
A abc B acb C cab D cba
答案:A
2下面描述中,符合结构化程序设计风格的是(A)
A)使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑
B)模块只有一个入口,可以有多个出口
C)注重提高程序的执行效率
D)不使用goto语句
3下面概念中,不属于面向对象方法的是(D)
A)对象 B)继承 C)类 D)过程调用
4关于面向对象的程序设计方法,下列说法正确的是(D)
A)“封装性”指的是将不同类型的相关数据组合在一起,作为一个整体进行处理
B)“多态性”指的是对象的状态会根据运行时要求自动变化
C)基类的私有成员在派生类的对象中不可访问,也不占内存空间
D)在面向对象的程序设计中,结构化程序设计方法仍有着重要作用
5判断字符型变量ch是否为大写英文字母,应使用表达式(D)
A ) ch>='A' & ch<='Z' B ) ch<='A' ||ch>='Z'
C ) 'A'<=ch<='Z' D ) ch>='A' && ch<='Z'
6已知下列语句中的x和y都是int型变量,其中错误的语句(C)
A ) x=y++; B ) x=++y; C ) (x+y)++; D ) ++x=y;
7执行语句序列(D)
int n;
cin >> n;
switch(n)
{ case 1:
case 2: cout << '1';
case 3:
case 4: cout << '2'; break;
default: cout << '3';
}
时,若键盘输入1,则屏幕显示
A)1 B)2 C)3 D)12
8关于动态存储分配,下列说法正确的是(B)
A)new和delete是C++语言中专门用于动态内存分配和释放的函数
B)动态分配的内存空间也可以被初始化
C)当系统内存不够时,会自动回收不再使用的内存单元,因此程序中不必用delete释放内存
空间
D)当动态分配内存失败时,系统会立刻崩溃,因此一定要慎用new
9)对类的构造函数和析构函数描述正确的是(A)
A 构造函数可以重载,析构函数不能重载
B 构造函数不可以重载,析构函数可以重载
C 构造函数可以重载,析构函数也可以重载
D构造函数不能重载,析构函数也不能重载
(10)下列程序的输出结果是(A)
#include
using namespace std;
int main()
{
char a[] = "Hello, World";
char *ptr = a;
while (*ptr)
{
if (*ptr >= 'a' && *ptr <= 'z')
cout << char(*ptr + 'A' -'a');
else cout << *ptr;
ptr++;
}
return 0;
}
A ) HELLO, WORLD B ) Hello, World
C ) hELLO, wORLD D ) hello, world
11) 已知:int m=10;在下列定义引用的语句中,正确的是(A)
A ) int &x=m; B )int y=&m;
C )int &z; D ) int &t=&m;
(17)下列函数原型声明中错误的是(D)
A ) void Fun(int x=0, int y=0);
B ) void Fun(int x, int y);
C ) void Fun(int x, int y=0);
D ) void Fun(int x=0, int y);
(12)已知程序中已经定义了函数test,其原型是int test(int, int, int);,则下列重载形式中正确
的是(B)
A ) char test(int,int,int);
B ) double test(int,int,double);
C ) int test(int,int,int=0);
D ) float test(int,int,float=3.5F);
(13)已知函数f的原型是:void f(int *a, long &b); 变量v1、v2的定义是:int v1;long v2;,正
确的调用语句是(C)
A) f(v1, &v2); B) f(v1, v2);
C) f(&v1, v2); D) f(&v1, &v2);
(14)有以下类定义
class MyClass
{
public:
MyClass(){cout<<1;}
};
则执行语句MyClass a, b[2], *p[2];后,程序的输出结果是(B)
A)11 B)111 C)1111 D)11111
(15)关于动态存储分配,下列说法正确的是(B)
A)new和delete是C++语言中专门用于动态内存分配和释放的函数
B)动态分配的内存空间也可以被初始化
C)当系统内存不够时,会自动回收不再使用的内存单元,因此程序中不必用delete释放内存
空间
D)当动态分配内存失败时,系统会立刻崩溃,因此一定要慎用new
(16)关于友元,下列说法错误的是(A)
A)如果类A是类B的友元,那么类B也是类A的友元
B)如果函数fun()被说明为类A的友元,那么在fun()中可以访问类A的私有成员
C)友元关系不能被继承
D)如果类A是类B的友元,那么类A的所有成员函数都是类B的友元
(17)在公有派生的情况下,派生类中定义的成员函数只能访问原基类的(C)
A)公有成员和私有成员 B)私有成员和保护成员
C)公有成员和保护成员 D)私有成员、保护成员和公有成员
(18)在C++中用来实现运行时多态性的是(D)
A)重载函数 B)析构函数 C)构造函数 D)虚函数
(19)一个类可以同时继承多个类,称为多继承。下列关于多继承和虚基类的表述中,错误的
是(C)
A)每个派生类的构造函数都要为虚基类构造函数提供实参
B)多继承时有可能出现对基类成员访问的二义性问题
C)使用虚基类可以解决二义性问题并实现运行时的多态性
D)建立最派生类对象时,虚基类的构造函数会首先被调用
(20)在一个类体的下列声明中,正确的纯虚函数声明是(A)
A) virtual void vf()=0; B) void vf(int)=0;
C) virtual int vf(int); D) virtual void vf(int) { }
(21)在下面的运算符重载函数的原型中,错误的是(A)
A) Volume operator - (double, double);
B) double Volume::operator- (double);
C) Volume Volume: :operator - (Volume);
D) Volume operator - (Volume, Volume);
(22)下列关于继承方式的描述中,错误的是(D)
A)如果不显式地指定继承方式,缺省的继承方式是私有(private)
B)采用公有继承方式时,基类中的公有成员在派生类中仍然是公有成员
C)采用保护继承方式时,基类中的保护成员在派生类中仍然是保护成员
D)采用私有继承方式时,基类中的私有成员在派生类中仍然是私有成员
(23)已知函数FA调用FB,若要把这两个函数定义在同一个文件中,则: D
A)FA必须定义在FB之前
B)FB必须定义在FA之前
C)若FA定义在FB之后,则FA的原型必须出现在FB的定义之前
D)若FB定义在FA之后,则FB的原型必须出现在FA的定义之前
(24)有如下两个类定义
class AA{};
class BB{
AA v1,*v2;
BB v3;
int *v4;
};
其中有一个成员变量的定义是错误的,这个变量是:C
A)v1 B)v2 C)v3 D)v4
(25)有如下类定义 (13)B:
class XX{
int xdata;
public:
XX(int n=0) : xdata (n) { }
};
class YY : public XX{
int ydata;
public:
YY(int m=0, int n=0) : XX(m), ydata(n) { }
};
YY类的对象包含的数据成员的个数是
A)1 B)2 C)3 D)4
(26)下列有关运算符函数的描述中,错误的是:C
A)运算符函数的名称总是以operator为前缀
B)运算符函数的参数可以是对象
C)运算符函数只能定义为类的成员函数
D)在表达式中使用重载的运算符相当于调用运算符重载函数
(27)下列字符串可以用作C++标识符的是:D
A)2009var B)goto C)test - 2009 D)_123
(28)下列枚举类型的定义中,包含枚举值3的是:A
A)enum test {RED, YELLOW, BLUE, BLACK};
B)enum test {RED, YELLOW=4, BLUE, BLACK};
C)enum test {RED=-1, YELLOW,BLUE, BLACK};
D)enum test {RED, YELLOW=6, BLUE, BLACK};
(29)有如下程序段:C
int i=1;
while (1) {
i++;
if(i == 10) break;
if(i%2 == 0) cout << '*';
}
执行这个程序段输出字符*的个数是
A)10 B)3 C)4 D)5
(30)已知数组arr的定义如下:D
int arr[5] = {1,2,3,4,5};
下列语句中输出结果不是2的是
A)cout << *arr+1 < C)cout << arr[1] <(31)计算斐波那契数列第n项的函数定义如下:B
Int fib(int n){
if (n == 0) return 1;
else if (n == 1) return 2;
else return fib(n-1)+fib(n-2);
}
若执行函数调用表达式fib(2),函数fib被调用的次数是
A)1 B)2 C)3 D)4
(32)Sample是一个类,执行下面语句后,调用Sample类的构造函数的次数是: D
Sample a[2], *p = new Sample;
A)0 B)1 C)2 D)3
(33)下列关于虚基类的描述中,错误的是: C
A)使用虚基类可以消除由多继承产生的二义性
B)构造派生类对象时,虚基类的构造函数只被调用一次
C)声明“class B : virtual public A”说明类B为虚基类
D)建立派生类对象时,首先调用虚基类的构造函数
(34)下列关于运算符重载的描述中,错误的是: C
A)::运算符不能重载
B)类型转换运算符只能作为成员函数重载
C)将运算符作为非成员函数重载时必须定义为友元
D)重载[]运算符应完成“下标访问”操作
(35)有如下类定义 class A {
char *a;
public:
A():a(0){}
A(char *aa){ //把aa所指字符串拷贝到a所指向的存储空间
a= A ;
strcpy(a,aa);
strcpy(a,aa);
}
~A() {delete []a;}
};
横线处应填写的表达式是
A)new char[strlen(aa)+1] B)char[strlen(aa)+1]
C)char[strlen(aa)] D)new char[sizeof(aa)-1]
(36)将运算符重载为类成员函数时,其参数表中没有参数,说明该运算是: (B)
A)不合法的运算符 B)一元运算符 C)无操作数的运算符 D)二元运算符
(37)下列选项中不属于结构化程序设计原则的是:A
A)可封装 B)自顶向下 C)模块化 D)逐步求精
38、下列特性中不是面向对象程序设计语言所特有的是( D )。
(A)数据封装
(A)指针 (B)引用 (C)枚举 (D)结构
(D)protected
40、类成员的访问权限中,( C )只能被本类的成员函数和其友元函数访问。
(A)share (B)public (C)private
(A)构造函数名字和类名相同
(B)构造函数在创建对象时自动执行
(C)构造函数无任何函数返回类型
(D)构造函数有且只有一个
42、派生类可以访问其基类的( D )。
(A)公有成员 (B)保护成员
(C)私有派生 (D)公有和保护成员
43、下列关于运算符重载的描述中,错误的是( B )。
(A)运算符重载不可以改变操作数的个数
(B)运算符重载不可以改变运算符的功能
(C)运算符重载不可以改变结合方向
(D)运算符重载不可以改变运算优先级
44、C++语言是从早期的C语言逐渐发展演变而来的.与C语言相比,它在求解问题方法上进
行的最大改进是( B )
(A)面向过程 (B)面向对象 (C)安全性 (D)复用性
45、对于类中定义的成员,其隐含访问权限为( C )。
41、关于构造函数,下列说法不正确的是( D )。
(B)继承(C)多态性 (D)模板
39、( B )是给变量取一个别名,它引入了变量的同意词。
A.public B.protected
C.private D.static
46、下面有关重载函数的说法中正确的是( C )
(A)重载函数必须具有不同的返回值类型; (B)重载函数形参个数必须不同;
(C)重载函数必须有不同的形参列表 (D)重载函数名可以不同;
47、有如下的对类“CSample”的说明,其中( A )是错误的。
class CSample {
A.int a=23;
B.CSample();
public:
C.CSample(int val);
D.~ CSample();
48、在int a=3,int *p=&a;中,*p的值是(D )
A.变量a的地址值 B.无意义
C.变量p的地址值 D.3
49、每个类( C )构造函数。
(A)只能有一个 (B)只可有公有的
(C)可以有多个 (D)只可有缺省的
50、在一个类中可以对一个操作符进行( D )重载。
(A)1 种 (B)2 种以下 (C)3 种以下 (D)多种
51、在公有继承的情况下,基类非私有成员在派生类中的访问权限( B )
(A) 受限制 (B)保持不变 (C)受保护 (D)不受保护
52、应在下列程序划线处填入的正确语句是( C )
#include
class Base
{public:
void fun(){cout<<"Base::fun"<};
class Derived:public Base
{ void fun()
{_____________//显示调用基类的函数fun()
cout<<"Derived::fun"<}
};
(A)fun(); (B)(); (C)Base::fun(); (D)Base->fun();
53、执行下面的程序将输出( A )
#include
class BASE{
char c;
public:
};
BASE(char n):c(n){}
virtual ~BASE(){cout<};
class DERIVED:public BASE{
char c;
DERIVED(char n):BASE(n+1),c(n){}
~DERIVED(){cout< public:
int main()
{DERIVED a('X');
return 0;
}
(A)XY (B)YX (C)X (D)Y
54、下面描述中,表达错误的是( B )
(A)公有继承时基类中的public成员在派生类中仍是public的
(B)公有继承是基类中的private成员在派生类中仍是private的
(C)公有继承时基类中的protected成员在派生类中仍是protected的
(D)私有继承时基类中的public成员在派生类中是private的
55、定义析构函数时,应该注意( C )
(A)其名与类名完全相同 (B)返回类型是 void 类型
(C)无形参,也不可重载 (D)函数体中必须有 delete 语句
56、对于在类中定义的静态数据成员,下面正确的说法是( C )
A.该类的每个对象中都有一个静态数据成员
B.对象创建时产生
C.在类外进行初始化
D.既可以在类外初始化,也可以在类内初始化
57、C++中声明常量的关键字是( A )。
A. const B. extern C. public D. enum
发布评论