分类: C/C++
2013-02-26 22:20:54
原文地址:简单点的C++测试题 ,代码见附件 作者:xingfuhaitun
1. 下列关于对象概念的描述中,( A )是错误的。
A. 对象就是C语言中的结构变量
B. 对象代表着正在创建的系统中的一个实体
C. 对象(类)是一个状态和操作(或方法)的封装体
D. 对象之间的信息传递是通过消息进行的
2. 分析下面的C++代码段:
class Employee
{
private:
int a;
protected:
int b;
public:
int c;
};
class Director:public Employee{};
在Main()中,下列( C)操作是正确的。
a) Employee obj;
obj.b=1;
b) Director boj;
obj.b=10;
c) Employee obj;
obj.c=3;
d) Director obj;
obj.a=20;
3. #include
#define SQR(x) x*x
void main()
{
int a=10,k=2,m=1;
a/=SQR(k+m);
}
执行上面的C++程序后,a的值是( B )。
a) 10
b) 2
c) 9
d) 0
4. C++ 基类中的private成员通过( D )类型的继承,可以被派生类访问。
a) public
b) protected
c) private
d) 任何类型的继承都不能使得派生类可以访问基类的private成员
5. 下列概念()体现了面向对象的多态性。( B )
a) 虚基类
b) 虚函数
c) 对象容器
d) 封装
6. #include
class One
{
public:
void display(){cout<<"1"<<"";}
};
class Two:public One
{
public:
void display(){cout<<"2"<<"";}
};
void main()
{
One first;
Two second;
first.display();
second.display();
One *p=&first;
p->display();
p=&second;
p->display();
}
在C++中,以上程序的运行结果为( C )。
a) 1 1 1 2
b) 1 2 1 2
c) 1 2 1 1
d) 2 1 1 2
7. #include
class A
{
public:
A(){cout<<"A construct";}
};
class B:public A
{
public:
B():A(){cout<<"B construct"<
};
void main(){B obj;}
上面的C++程序运行的结果是( B )。
a) B construct A construct
b) A construct B construct
c) A construct
d) B construct
8. class wheel
{
int num;
public:
wheel (int w){num=w;}
};
class car
{
wheel carWheel;
public:
//写出car的构造函数
}
在C++中,上面程序中,空白处正确的语句是(B )。
a) void car(int n)::carWheel(n){}
b) car(int n): carWheel(n){}
c) void car(int n):: carWheel(n){}
d) car(int n):: carWheel(n){}
9. class Employee
{
private :
int a ;
protected:
int b;
public :
int c;
void display();
};
class Director:public Employee
{
public :
void show();
};
在C++中,以下操作正确的是( D)。
a) void Employee::show(){cout<
b) void Director::display(){cout<
c) void Director::show(){cout<
d) void Director::show(){cout<
10. 在C++中,下列类的成员函数( C )属于纯虚函数。
A) void display();
B) Virtual void display();
C) Virtual void display()=0;
D) Virtual void display(){int a=0};
11. C++中,下列关于继承的描述。( A )是错误的。
a) 继承是基于对象操作的层面而不是类设计的层面上的
b) 子类可以继承父类的公共行为
c) 继承是通过重用现有的类来构建新的类的一个过程
d) 将相关的类组织起来,从而可以共享类中的共同的数据和操作
12. #include
int &func(int &num)
{
num++;
return num;
}
void main()
{
int n1,n2=5;
n1=func(n2);
cout<
}
上面C++程序运行结果是( C ).(选择一项)
a) 56
b) 65
c) 66
d) 55
13. #include
class A
{
public:
A(){}
~A(){cout<<"A destroy";}
};
class B:public A
{
public:
B():A(){}
~B(){cout<<"B destroy";}
};
void main(){B obj;}
上面的C++程序运行的结果是( A )。
a) B destroy A destroy
b) A destroy B destroy
c) A destroy
d) B destroy
14. 如果基类A 和A 的派生类B中都有成员函数func();
要在派生类的func()中调用同名的基类的func()成员函数,下列( B )操作下正确的。
a) func();
b) A::func();
c) B::func();
d) A.func();
15. 读下面C++程序:
#include
class vehicle
{
protected:
int wheels;
public:
vehicle(int in_wheels=4){wheels=in_wheels;}
int get_wheels(){ return wheels;}
};
void main()
{
vehicle unicyclel;
vehicle unicycle2(3);
cout<<"The unickele1 has"<
cout<<"The unickele2 has"<
}
编译后输出结果为( C )。
a)The unicycle1 has 0 wheel.
The unicycle2 has 3 wheel.
b)The unicycle1 has 4 wheel.
The unicycle2 has 4 wheel.
c)The unicycle1 has 4 wheel.
The unicycle2 has 3 wheel.
d)The unicycle1 has 0 wheel.
The unicycle2 has 4 wheel.
16. 对类的构造函数和析构函数描述正确的是( A)
A)构造函数可以重载,析构函数不能重载
B)构造函数不能重载,析构函数可以重载
C)构造函数可以重载,析构函数也可以重载
D)构造函数不能重载,析构函数也不能重载
17. 下面对静态数据成员的描述中,正确的是( A)
A)静态数据成员是类的所有对象共享的数据
B)类的每个对象都有自己的静态数据成员
C)类的不同对象有不同的静态数据成员值
D)静态数据成员不能通过类的对象调用
18. 可以用p.a的形式访问派生类对象p的基类成员a,其中a是(D )
A)私有继承的公有成员
B)公有继承的私有成员
C)公有继承的保护成员
D)公有继承的公有成员
19. 建立派生类对象时,3种构造函数分别是a(基类的构造函数)、b(成员对象的构造函数)、c(派生类的构造函数)这3种构造函数的调用顺序为( A )
A)abc
B)acb
C)cab
D)cba
20. 下面关于虚函数的描述,错误的是( B )
A)在成员函数声明的前面加上virtual修饰,就可把该函数声明为虚函数
B)基类中说明了虚函数后,派生类中对应的函数也必须说明为虚函数
C)虚函数可以是另一个类的友元函数,但不能是静态成员函数
D)基类中说明的纯虚函数在其任何派生类中都必须实现
21. C++语言是从早期的C语言逐渐发展演变而来的.与C语言相比,它在求解问题方法上进行的最大改进是(B )
A)面向过程 B)面向对象 C)安全性 D)复用性
22. 下面描述中,表达错误的是( B )
A)公有继承时基类中的public成员在派生类中仍是public的
B)公有继承是基类中的private成员在派生类中仍是private的(不可访问)
C)公有继承时基类中的protected成员在派生类中仍是protected的
D)私有继承时基类中的public成员在派生类中是private的
23. 在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是( C )。
A.派生类的对象可以赋给基类的对象
B.派生类的对象可以初始化基类的引用
C.派生类的对象可以直接访问基类中的成员
D.派生类的对象的地址可以赋给指向基类的指针
24. 定义派生类时,若不使用关键字显示地规定采用何种继承方式,则默认方式为( A )。
A.私有继承
B.非私有继承
C.保护继承
D.公有继承
25. 在函数的返回值类型与返回值表达式的类型的模式中,( B )是错误的。
A.函数返回值的类型是在定义函数时确定,在函数调用时是不能改变的
B.函数返回值的类型就是返回值表达式的类型
C.函数返回值表达式类型与函数返回值类型不同时,表达式类型应转换成函数返回值类型
D.函数返回值类型决定了返回值表达式的类型
26. 完成下列程序
要求输出以下内容
*
*.*.
*..*..*..
*...*...*...*...
*....*....*....*....*....
*.....*.....*.....*.....*.....*.....
*......*......*......*......*......*......*......
*.......*.......*.......*.......*.......*.......*.......*.......
完成以下程序
#include
using namespace std;
#define N 8
int main(void)
{
int i;
int j;
int k;
for(i = 0; i < N ; i++)
{
for(j = i; j >= 0; j--)
{
cout << "*";
for(k = i; k > 0; k-- )
{
cout << ".";
}
}
cout << endl;
}
return 0;
}
27. 完成代码
背景:某网络游戏存在战士(Fighter)、野蛮人(Savage)、白法师(WhiteWitch)三种角色,它们具有 Role接口,Role接口提供显示方法display()。现要将黑法师(BlackWitch)角色加入此网络游戏以实现功能扩充。已知某第三方库已经提供了法师 (Witch)类,且完全满足系统新增的黑法师角色所需的功能,但法师(witch)不是由Role派生而来,它提供的显示方法(displayself())不能被系统直接使用。要求既使用了法师(Witch),又遵循了Role规定的接口,既避免了从头开发一个新的黑法师类,又可以不修改游戏中已经定义的接口。
要求1:给出Role、Fighter、Savage、WhiteWitch的类定义
要求2:给出BlackWitch、witch的类定义
要求3:设计一个类,提供通用的角色显示方法(int show(int type)),根据输入值(整形值)生成特定的角色实例,并对之进行显示操作。