C++面向对象程序设计模拟试题三
一、单项选择题(本大题共10小题,每小题2分,共20分)在每小题列出的四个备选项中,只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。
1.下面有关重载函数的描述中,正确的是( c )。
A)重载函数必须具有不同的返回值类型 B)重载函数形参个数必须不同 C)重载函数一般具有不同的形参表 D)重载函数名可以不同 2.假定MyCIass为一个类,那么下列的函数说明中,( d )为该类的析构函数。
A)void~MyClass(); B)~MyClass(int n); C)MyClass( ); D)~MyClass( ); 3.( a )是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型。
A)模板 B)类 C)对象 D)函数 4.下面关于静态成员函数的途术中错语的是( b )。
A)静态成员函数可以有返回值 B)静态成员函数含有this指针
C)静态成员函数可以具有指针参数 D)静态成员函数可有具有返回值类型 5.定义类模板时要使用关键字( d )。
A)private B)public C)delete D)template 6.下列是重载乘法运算符的函数原型声明,其中错误的是( a )。
A)friend MyClass operator*(double,double); B)friend MyClass operator*(double,MyClass); C)friend MyClass operator*(MyClass,double); D)friend MyClass operator*(MyClass,MyClass); 7.以下( c )成员函数表示纯虚函数。
A)virtual int fun(int) B)void fun(int)=0 C)virtual void fun()=0 D)virtual void fun(int){} 8.关于纯虚函数,下列表述中正确的是( c )。
A)纯虚函数的声明不一定以\结束 B)含有纯虚函数的类可以定义对象 C)含有纯虚函数的类是抽象类 D)上面都是错误的 9.( c )解决二义性问题。
A)只能使用作用域分辨操作符 B)只能使用虚基类 C)使用作用域分辨操作符或虚基类 D)上面都不能 10.实现编译时的多态性要使用( a )。
A)重载函数 B)析构函数 C)构造函数 D)虚函数 二、填空题(本大题共5小题,每小题2分,共10分)不写解答过程,将正确的答案写在每小题的空格内。错填或不填均无分。
1.定义一个函数名为fun,返回值为int,没有参数的纯虚函数的声明是( virtual int fun() = 0; )。
2.定义静态成员函数应使用关键字( static )。 3.在C++中,如果类的名称是CTest,则此类的构造函数名称为( CTest )。
4.在类的对象被创建时,( 构造函数 )函数会被自动调用。
5.用class声明的类中数据成员和成员函数的默认访问级别为( private )。 三、程序分析题(本大题共6小题,每小题5分,共30分)给出下面各程序的输出结果。 1.阅读下面程序,写出输出结果。 #include
class A {
public: A() { cout << \ ~A() { cout << \};
int main() { A a, *p = new A; delete p; cout << \ return 0; }
上面程序的输出结果为: A() A() ~A() end ~A()
2.阅读下面程序,写出输出结果。 #include
class Array {
private: int *elem; int size;
public: Array(int a[], int sz): elem(a), size(sz){ } int GetSize() const { return size; } int &operator[](int pos){ return elem[pos - 1]; }
};
int main() { int a[] = {1, 2, 3, 4, 5}; Array ar(a, 5); ar[1] = 8; for (int i = 1; i <= ar.GetSize(); i++) cout << ar[i] << \ \ cout << endl; return 0; }
上面程序的输出结果为:
3.阅读下面程序,写出输出结果。 #include
class A {
public: virtual void Show() const { cout << \};
class B: public A {
public: void Show() const { cout << \ };
void Fun1(A obj) { obj.Show(); } void Fun2(const A &obj) { obj.Show(); }
int main() { B b; Fun1(b); Fun2(b); A *p = new B; p->A::Show();