面向对象程序设计C++模拟试卷
考试时间:90分钟
一、简答题(10分)
1.1 (3分)C++中的函数调用有哪几种方式?它们有什么区别?
答案:C++中的函数调用有值传递和引用传递两种。(1分)
值传递时,函数体对形参的任何修改都不会影响实参。(1分)
引用传递时,函数体对形参的修改就相当于对实参的修改。(1分)
1.2 (3分)若派生类以private方式从一个基类派生,派生类的对象可以访问基类中的那些成员?派生类的成员函数可以访问基类中的那些成员?
答案:若派生类以private方式从一个基类派生,派生类的对象不能访问基类中的任何成员(1分);派生类的成员函数可以访问基类中的public和protected成员(2分)。
1.3(4分)什么是引用?它与指针有什么区别?
答案:引用是某个变量或对象的别名。引用不是变量,它不占据内存空间,它本身没有内存
地址。引用只是被引用的变量或对象的替身。(2分)
引用与指针的区别在于应用不是变量,而指针是变量。没有引用的引用,却有指针的引用。(2分)
二、填空题(20分,每空2分)
2.1 C++程序中的数据可以分为两大类,其中 是指在程序执行过程中值不改变的数据; 是程序中用于存储信息的单元,并对应于某个内存空间。
答案:常量、变量
2.2 有如下定义语句“MyClass *p;”则执行“p = new MyClass;”语句时,将自动调用类MyClass的 。执行“delete p;”语句时,自动调用该类的 。
答案:构造函数、析构函数
2.3 C++中函数之间传递参数有 和 两种方式。
答案:值传递,引用传递
2.4 给出下列程序的输出结果: 。
#include <iostream.h>
#define MIN(x, y) (x) < (y) ? (x) : (y)
void main() {
int i, j, k;
i = 10; j = 15;
k = 10 * MIN(i, j);
cout << k << endl;
}
答案:15
2.6 类的访问权限有 、 和 三种。
答案:private,protect,public
三、选择题(20分,每题2分)
3.1 在下列选项中,合法的C++变量名是 。
A. long B. _2Test C. 3Dmax D. A.dat
答案:B
3.2在对字符数组进行初始化, 是正确的。
A. char s1[] = "abcd"; B. char s2[3] = "xyz";
C. char s3[][3] = {'a', 'x','y'}; D. char s4[2][3] = {"xyz", "mnp"};
答案:A
3.3 字符串常量"ME"的字符个数是 。
A. 4 B. 3 C. 2 D.1
答案:B
3.4 下列对C++ main()函数的描述中,正确的是 。
A. main()函数在同一个C++文件中可以有多个
B. main()函数类型必须是void类型
C. main()函数一定有返回值
D. 每个C++程序都必须有一个main()函数
答案:D
3.5已知:int m = 10,下列表示引用的方法中, 是正确的。
A. int &x = m; B. int &x = 10; C. int &x; D. float &x = &m;
答案:A
3.6 下列对C++语言中函数参数默认值的描述中,正确的是 。
A. 函数参数的默认值只能设定一个
B. 一个函数的参数若有多个,则参数默认值的设定可以不连续
C. 函数参数必须设定默认值
指向类成员函数的指针D. 在设定参数的默认值之后,该参数后面定义的所有参数都必须设定默认值
答案:D
3.7 下列关于运算符重载的描述中, 是正确的。
A. 运算符重载可改变其优先级 B. 运算符重载不改变其语法结构
C. 运算符重载可改变其结合性 D. 运算符重载可改变其操作数的个数
答案:B
3.8 下列关于类的析构函数的描述中,错误的是 。
A. 类中有且仅有一个析构函数 B. 析构函数可以有形参
C. 析构函数没有函数类型 D. 析构函数在对象撤销时被自动执行
答案:B
3.9 为了使类中的成员能够被类的对象通过成员运算符访问,则应该把成员的访问权限定义为 。
A. public B. protected C. private D. packaged
答案:A
3.10 假设MyClass为一个类,那么下列函数说明中, 是该类的析构函数。
A. void ~MyClass(); B. ~MyClass(int n);
C. ~MyClass(void); D. ~MyClass();
答案:D
四、读程题(20分,每题5分)
4.1 给出下列源程序的输出结果。
#include <iostream.h>
void main( ) {
int x = 5, y = 2;
cout << !(y == x/2) << ",";
cout << (y != x%3) << ",";
cout << (x > 0 && y < 0) << ",";
cout << (x != y || x >= y) << endl;
}
答案:0, 0, 0, 1
4.2 给出下述源程序的运行结果。
#include <iostream.h>
void sub(int x, int y, int *z) {
*z = y + x;
}
void main() {
int a, b, c;
sub(8, 4, &a);
sub(6, a, &b);
sub(a, b, &c);
cout << a << "," << b << "," << c << endl;
}
答案:12, 18, 30
4.3 指出下列类定义中的错误。
class MyClass {
int i = 0;
public:
void MyClass();
~MyClass(int value);
};
答案:(1) 数据成员i在定义进行了初始化
(2) 构造函数定义了返回值
(3) 析构函数定义了参数
4.4给出下列程序的运行结果。
#include <iostream.h>
class Point {
public:
Point(int i, int j) { x = i; y = j; }
void Print() { cout << '(' << x << ','<< y << ')' << endl; }
void operator += (Point p) { x += p.x; y += p.y; }
void operator -= (Point p) { x -= p.x; y -= p.y; }
private:
int x, y;
};
void main() {
Point P1(5, 7), P2(4, 3);
P1.Print();
P2.Print();
P1 += P2;
P1.Print();
P2 -= P1;
P2.Print();
}
答案:(5,7)
(4,3)
(9,10)
(-5,-7)
五、编程题(30分,每题15分)
5.1定义并实现一个类Myst,使下列语句能够正常运行。
Myst x(3.2), y(5,5), z(0.0);
z = 8.9 – y;
y = x – 6.3;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论