面向对象程序设计C++模拟试卷
考试时间:90分钟
一、简答题(10分)
1.1 3分)C++中的函数调用有哪几种方式?它们有什么区别?
答案C++中的函数调用有值传递和引用传递两种。(1分)
      值传递时,函数体对形参的任何修改都不会影响实参。(1分)
      引用传递时,函数体对形参的修改就相当于对实参的修改。(1分)
1.2 3分)若派生类以private方式从一个基类派生,派生类的对象可以访问基类中的那些成员?派生类的成员函数可以访问基类中的那些成员?
答案:若派生类以private方式从一个基类派生,派生类的对象不能访问基类中的任何成员(1分);派生类的成员函数可以访问基类中的publicprotected成员(2分)。
1.34分)什么是引用?它与指针有什么区别?
答案:引用是某个变量或对象的别名。引用不是变量,它不占据内存空间,它本身没有内存
地址。引用只是被引用的变量或对象的替身。(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 类的访问权限有                                            三种。
答案privateprotectpublic
三、选择题(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小时内删除。