资源描述
C++面向对象程序设计模拟试题四
一、单项选择题(本大题共10小题,每小题2分,共20分)在每小题列出的四个备选项中,只有一个是符合题目规定的,请将其代码填写在题后的括号内。错选、多选或未选均无分。
1.下列关于C++函数的说明中,对的的是( )。
A)内联函数就是定义在另一个函数体内部的函数
B)函数体的最后一条语句必须是return语句
C)调用一个函数之前,假如还没有定义这个函数,必须先声明其原型
D)编译器会根据函数的返回值类型和参数表来区分函数的不同重载形式
2.假定MyCIass为一个类,那么下列的函数说明中,( )为该类的无参构造函数。
A)void MyClass(); B)~MyClass(int n); C)MyClass( ); D)~MyClass( );
3.下列叙述中,错误的是( )。
A)派生类可以使用private派生
B)对基类成员的访问必须是无二义性的
C)基类成员的访问能力在派生类中维持不变
D)赋值兼容规则也合用于多继承的组合
4.当一个类的某个函数被说明为virtual时,该函数在该类及其所有派生类中( ) 。
A. 都是虚函数 B. 只有被重新说明为vittual时才是虚函数
C. 都不是虚函数 D. 上面都不对的
5.派生类的构造函数的成员初始化表中,不能包含( )。
A)基类的构造函数 B)派生类中子对象的初始化
C)基类中子对象的初始化 D)派生类中一般数据成员的初始化
6.下列是重载加法运算符的函数原型声明,其中错误的是( )。
A)MyClass operator+(double,double);
B)MyClass operator+(double,MyClass);
C)MyClass operator+(MyClass,double);
D)MyClass operator+(MyClass,MyClass);
7.派生类中的成员不能直接访问基类中的( )成员。
A)public B)private C)virtual D)protected
8.实现运营时的多态性要使用( )。
A)重载函数 B)析构函数 C)构造函数 D)虚函数
9.假如在类MyClass的外面使用函数调用MyClass::f();则函数f()是类MyClass的( )。
A. 静态成员函数 B. 非静态成员函数
C. 友元函数 D. 前面都不对的
10.由于常对象不能被更新,因此( )。
A)通过常对象只能调用它的常成员函数
B)通过常对象只能调用静态成员函数
C)常对象的成员都是常成员
D)通过常对象可以调用任何不改变对象值的成员函数
二、填空题(本大题共5小题,每小题2分,共10分)不写解答过程,将对的的答案写在每小题的空格内。错填或不填均无分。
1.对于派生类的构造函数,在定义对象时构造函数的执行顺序为:先执行调用___________的构造函数,再执行调用子对象类的构造函数,最后执行派生类的构造函数体中的内容。
2.声明类模板应使用关键字( )。
3.重载的关系运算符和逻辑运算符的返回类型应当是( )。
4.在面向对象方法中,类的实例称为( )。
5.在类的对象被释放时,( )函数会被自动调用。
三、完毕程序填题(本大题共3个小题,每小题3分,共9分)下面程序都留有空白,请将程序补充完整,
1.请完毕下面的程序
#include <iostream> // 预解决命令
using namespace std; // 使用标准命名空间std
// 测试静态成员类
class Test
{
private:
int a; // 数据成员
public:
Test(int x = 0): [1] {} // 构造函数
void Show(){ cout << "a:" << a << endl; } // 显示数据成员之值
};
int main(void) // 主函数main(void)
{
Test obj(168); // 定义对象
obj.Show(); // 显示数据成员之值
return 0; // 返回值0,返回操作系统
}
2.请完毕下面的程序
#include <iostream> // 预解决命令
using namespace std; // 使用标准命名空间std
// 整数类
class Integer
{
private:
int a; // 数据成员
public:
Integer(int x = 0){ a = x; } // 构造函数
[2] () { return a; } // 类型转换函数(将类类型转换为整型)
};
int main(void) // 主函数main(void)
{
Integer a = 6; // 定义整数对象
cout << a << endl; // 显示整数
return 0; // 返回值0, 返回操作系统
}
3.请完毕下面的程序
#include <iostream> // 预解决命令
using namespace std; // 使用标准命名空间std
// 复数类
class Complex
{
private:
double realPart; // 实部
double imagePart; // 虚部
public:
Complex(double real = 0, double image = 0): realPart(real), imagePart(image){ } // 构造函数
double GetRealPart() const{ return realPart; } // 返回实部
double GetImagePart() const{ return imagePart; } // 返回虚部
Complex operator+(const Complex &a) const // 重载加法运算符+
{
return Complex( [3] ); // 返回和
}
};
int main(void) // 主函数main(void)
{
Complex a(1, 2), b(2, 6), c; // 定义复数对象
c = a + b; // 复数加法运算
cout << "a=" << a.GetRealPart() << "+" << a.GetImagePart() << "i" << endl; // 显示a
cout << "b=" << b.GetRealPart() << "+" << b.GetImagePart() << "i" << endl; // 显示b
cout << "c=" << c.GetRealPart() << "+" << c.GetImagePart() << "i" << endl; // 显示c
return 0; // 返回值0, 返回操作系统
}
四、程序分析题(本大题共4小题,每小题5分,共20分)给出下面各程序的输出结果。
1.阅读下面程序,写出输出结果。
#include <iostream> // 预解决命令
using namespace std; // 使用标准命名空间std
class A
{
public:
virtual void Show() const
{ cout << "Class A" << endl; }
};
class B: public A
{
public:
void Show() const
{ cout << "Class B" << endl; }
};
void Show(const A & obj)
{ obj.Show(); }
int main(void)
{
A a; B b;
Show(a); Show(b);
A *p;
p = &a; p->Show();
p = &b; p->Show();
B *q;
q = &b; q->Show();
return 0; // 返回值0,返回操作系统
}
上面程序的输出结果为:
2.阅读下面程序,写出输出结果。
#include <iostream> // 预解决命令
using namespace std; // 使用标准命名空间std
template <class ElemType>
void Show(ElemType a[], int n)
{
for (int i = 0; i < n; i++)
{ cout << a[i] << " "; }
}
int main(void)
{
int a[] = {1, 6, 9};
Show(a, sizeof(a) / sizeof(int));
Show(a, 2);
cout << endl;
return 0; // 返回值0, 返回操作系统
}
上面程序的输出结果为:
3.阅读下面程序,写出输出结果。
#include <iostream> // 预解决命令
using namespace std; // 使用标准命名空间std
class MyClass
{
public:
MyClass(){ count++; }
~MyClass(){ count--; }
static int GetCount(){ return count; }
private:
static int count;
};
int MyClass::count = 0; // 初始化静态数据成员
int main(void)
{
MyClass obj1;
cout << MyClass::GetCount() << endl;
MyClass obj2;
cout << MyClass::GetCount() << endl;
MyClass obj3;
cout << obj1.GetCount() << endl;
MyClass *p = new MyClass;
cout << MyClass::GetCount() << endl;
delete p;
cout << MyClass::GetCount() << endl;
return 0; // 返回值0, 返回操作系统
}
上面程序的输出结果为:
4.阅读下面程序,写出输出结果。
#include <iostream> // 预解决命令
using namespace std; // 使用标准命名空间std
class A
{
public:
A() { cout << "A()" << endl; }
~A() { cout << "~A()" << endl; }
virtual void f() { cout << "A::f()" << endl; }
};
class B: public A
{
public:
B() { cout << "B()" << endl; }
~B() { cout << "~B()" << endl; }
void f() { cout << "B::f()" << endl; }
};
int main(void)
{
B obj;
A *p = &obj;
p->f();
return 0; // 返回值0, 返回操作系统
}
上面程序的输出结果为:
六、编程题(本大题26分)
编写程序,定义抽象基类Shape(形状),由它派生出3个派生类: Circle(圆形)、Rectangle(矩形)和Square (正方形),用函数函数ShowArea()分别显示各种图形的面积,最后还要显示所有图形的总面积。
C++面向对象程序设计模拟试题四参考答巡查
一、单项选择题(本大题共10小题,每小题2分,共20分)在每小题列出的四个备选项中,只有一个是符合题目规定的,请将其代码填写在题后的括号内。错选、多选或未选均无分。
1.C 2.C 3.C 4.A 5.C
6.A 7.B 8.D 9.A 10.A
二、填空题(本大题共5小题,每小题2分,共10分)不写解答过程,将对的的答案写在每小题的空格内。错填或不填均无分。
1.参考答案:基类
2.参考答案:template
3.参考答案:bool或布尔型
4.参考答案:对象
5.参考答案:析构函数
三、完毕程序填题(本大题共3个小题,每小题3分,共9分)下面程序都留有空白,请将程序补充完整,
1.参考答案:[1]a(x)
2.参考答案:[2]operator int
3.参考答案:[3] realPart + a.realPart, imagePart + a.imagePart或this->realPart + a.realPart, this->imagePart + a.imagePart
四、程序分析题(本大题共4小题,每小题5分,共20分)给出下面各程序的输出结果。
1.参考答案:
Class A
Class B
Class A
Class B
Class B
2.参考答案:
1 6 9 1 6
3.参考答案:
1
2
3
4
3
4.参考答案:
A()
B()
B::f()
~B()
~A()
六、编程题(本大题26分)
参考程序:
#include <iostream> // 预解决命令
using namespace std; // 使用标准命名空间std
const double PI = 3.1415926; // 定义常量PI
class Shape
{
public:
Shape() { } // 构造函数
virtual ~Shape() { } // 析构函数
virtual ShowArea() = 0; // 显示面积
static double totalArea; // 总面积
static void ShowTotalArea() { cout << "总面积:" << totalArea << endl; }
};
class Circle: public Shape
{
private:
double radius; // 半径
public:
Circle(double r): radius(r) { totalArea += PI * r * r; } // 构造函数
~Circle() { } // 析构函数
virtual ShowArea() { cout << "圆面积:" << PI * radius * radius << endl; }; // 显示面积
};
class Rectangle: public Shape
{
private:
double length; // 长
double width; // 宽
public:
Rectangle(double l, double w): length(l), width(w){ totalArea += l * w; } // 构造函数
~Rectangle() { } // 析构函数
virtual ShowArea() { cout << "矩形面积:" << length * width << endl; }; // 显示面积
};
class Square: public Shape
{
private:
double length; // 边长
public:
Square(double l): length(l){ totalArea += l * l; } // 构造函数
~Square() { } // 析构函数
virtual ShowArea() { cout << "正方形面积:" << length * length << endl; }; // 显示面积
};
double Shape::totalArea = 0; // 初始化totalArea
int main(void)
{
Circle c(1); // 定义圆对象
c.ShowArea(); // 显示面积
Rectangle r(1, 2); // 定义矩形对象
r.ShowArea(); // 显示面积
Square z(3); // 定义正方形对象
z.ShowArea(); // 显示面积
Shape::ShowTotalArea(); // 显示总面积
return 0; // 返回值0, 返回操作系统
}
展开阅读全文