资源描述
C++面向对象程序设计模拟试题三
一、单项选择题(本大题共10小题,每小题2分,共20分)在每小题列出的四个备选项中,只有一个是符合题目规定的,请将其代码填写在题后的括号内。错选、多选或未选均无分。
1.下面有关重载函数的描述中,对的的是( )。
A)重载函数必须具有不同的返回值类型 B)重载函数形参个数必须不同
C)重载函数必须具有不同的形参表 D)重载函数名可以不同
2.假定MyCIass为一个类,那么下列的函数说明中,( )为该类的析构函数。
A)void~MyClass(); B)~MyClass(int n); C)MyClass( ); D)~MyClass( );
3.( )是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型。
A)模板 B)类 C)对象 D)函数
4.下面关于静态成员函数的途术中错语的是( )。
A. 静态成员函数可以有返回值 B. this指针可以指向静态成员函数
C. 静态成员函数可以具有指针参数 D. 静态成员函数可有具有返回值类型
5.定义类模板时要使用关键字( )。
A. private B. public C. delete D. template
6.下列是重载乘法运算符的函数原型声明,其中错误的是( )。
A)MyClass operator*(double,double); B)MyClass operator*(double,MyClass);
C)MyClass operator*(MyClass,double); D)MyClass operator*(MyClass,MyClass);
7.以下( )成员函数表达纯虚函数。
A)virtual int fun(int) B)void fun(int)=0
C)virtual void fun()=0 D)virtual void fun(int){}
8.关于纯虚函数,下列表述中对的的是( )。
A)纯虚函数的声明总是以"=0"结束 B)具有纯虚函数的类可以定义对象
C)具有纯虚函数的类是抽象类 D)上面都是错误的
9.( )解决二义性问题。
A. 只能使用作用域分辨操作符 B. 只能使用虚基类
C. 使用作用域分辨操作符或虚基类 D. 上面都不能
10.实现编译时的多态性要使用( )。
A)重载函数 B)析构函数 C)构造函数 D)虚函数
二、填空题(本大题共5小题,每小题2分,共10分)不写解答过程,将对的的答案写在每小题的空格内。错填或不填均无分。
1.定义一个函数名为fun,返回值为int,没有参数的纯虚函数的声明是( )。
2.定义静态成员函数应使用关键字( )。
3.在C++中,假如类的名称是CTest,则此类的构造函数名称为( )。
4.在类的对象被创建时,( )函数会被自动调用。
5.类中数据成员和成员函数的默认访问级别为( )。
三、完毕程序填题(本大题共3个小题,每小题3分,共9分)下面程序都留有空白,请将程序补充完整,
1.请完毕下面的程序
#include <iostream> // 预解决命令
using namespace std; // 使用标准命名空间std
// 测试静态成员类
class Test
{
private:
[1] int count; // 对象数
public:
Test(){ count++; } // 构造函数, 实现对对象进行计数
static void Show(){ cout << "共有" << count << "个对象!" << endl; } // 显示对象数
};
int Test::count = 0; // 初始化静态数据成员赋初值
int main(void) // 主函数main(void)
{
Test obj1, obj2, obj3; // 定义对象
Test::Show(); // 显示对象数
return 0; // 返回值0,返回操作系统
}
2.请完毕下面的程序
#include <iostream> // 预解决命令
using namespace std; // 使用标准命名空间std
// 整数类
class Integer
{
private:
int a; // 数据成员
public:
Integer(int x = 0){ a = x; } // 构造函数
operator int() { return a; } // 类型转换函数
Integer operator+(const Integer &i) const // 重载加法运算符+
{
return [2] ; // 返回和
}
};
int main(void) // 主函数main(void)
{
Integer a(2), b(3), c; // 定义整数对象
c = a + b; // 求和
cout << c << endl; // 显示和
return 0; // 返回值0, 返回操作系统
}
3.请完毕下面的程序
#include <iostream> // 预解决命令
using namespace std; // 使用标准命名空间std
template <class ElemType>
class A
{
private:
ElemType a; // 数据成员
public:
A(ElemType x): a(x){ } // 构造函数
void Show() const
{ cout << a << endl; } // 显示a之值
};
int main(void) // 主函数main(void)
{
A< [3] > obj("Hello, world!"); // 定义对象
obj.Show(); // 显示相关信息
return 0; // 返回值0, 返回操作系统
}
四、程序分析题(本大题共4小题,每小题5分,共20分)给出下面各程序的输出结果。
1.阅读下面程序,写出输出结果。
#include <iostream> // 预解决命令
using namespace std; // 使用标准命名空间std
class Point
{
private:
int x; // x坐标
int y; // y坐标
public:
Point(int a = 0, int b = 0):x(a), y(b){}
int GetX() const { return x; }
int GetY() const { return y; }
void SetX(int a) { x = a; }
void SetY(int b) { y = b; }
};
int main(void)
{
Point obj1;
const Point obj2(9, 98);
cout << obj1.GetX() << endl;
obj1.SetX(5);
cout << obj1.GetX() << endl;
obj1.SetY(18);
cout << obj1.GetY() << endl;
cout << obj2.GetX() << endl;
cout << obj2.GetY() << endl;
return 0; // 返回值0,返回操作系统
}
上面程序的输出结果为:
1.参考答案:
0
5
18
9
98
2.阅读下面程序,写出输出结果。
#include <iostream> // 预解决命令
using namespace std; // 使用标准命名空间std
class Array
{
private:
int *elem; // 数组元素存储空间
int size; // 数组元素个数
public:
Array(int a[], int sz): elem(a), size(sz){ } // 构造函数
int GetSize(){ return size; }
int &operator[](int pos){ return elem[pos - 1]; } // 重载下标运算符[]
};
int main(void)
{
int a[] = {1, 2, 3, 4, 5};
Array obj(a, 5);
obj[1] = 8;
for (int i = 1; i <= obj.GetSize(); i++) // 依次输出数组各元素之值
cout << obj[i] << " ";
cout << endl;
return 0; // 返回值0, 返回操作系统
}
上面程序的输出结果为:
3.阅读下面程序,写出输出结果。
#include <iostream> // 预解决命令
using namespace std; // 使用标准命名空间std
class A
{
public:
A(){ cout << "构造A" << endl; } // 构造函数
~A(){ cout << "析构A" << endl; } // 析构函数
};
class B: public A
{
public:
B(){ cout << "构造B" << endl; } // 构造函数
~B(){ cout << "析构B" << endl; } // 析构函数
};
int main(void)
{
B obj;
A *p = new A;
return 0; // 返回值0, 返回操作系统
}
上面程序的输出结果为:
4.阅读下面程序,写出输出结果。
#include <iostream> // 预解决命令
using namespace std; // 使用标准命名空间std
template <class ElemType>
ElemType f(ElemType x)
{
return x * (ElemType)5.1;
}
template <class ElemType>
void f(ElemType x, ElemType y)
{
x = x * 1.1;
y = y * 1.1;
cout << x << endl;
cout << y << endl;
}
int main(void)
{
cout << f(3.0) << endl;
f(1, 2);
f(1.0, 2.0);
system("PAUSE"); // 调用库函数system( ), 输出系统提醒信息
return 0; // 返回值0, 返回操作系统
}
上面程序的输出结果为:
五、程序改错题(本大题共3小题,每小题5分,共15分)指出下面程序中的错误,说明错误因素,并加以改正。
1.下面程序中类的定义中有一处错误,请指出犯错的行,说明错误因素,并加以改正。
#include <iostream> //1
using namespace std; //2
//3
class A //4
{ //5
public: //6
A(int x = 0, int y = 0): a = x, b = y {} //7
void Show() //8
{ //9
cout << a << " " << b << endl; //10
} //11
//12
private: //13
int a, b; //14
}; //15
//16
int main(void) //17
{ //18
A obj(18); //19
obj.Show(); //20
//21
return 0; //22
} //23
2.下面程序中类的定义中有一处错误,请指出犯错的行,说明错误因素,并加以改正。
#include <iostream> // 预解决命令 //1
using namespace std; // 使用标准命名空间std //2
//3
template <class ElemType> //4
ElemType Max(ElemType a, ElemType b) //5
{ //6
return (a > b) ? a : b; //5
} //6
//7
int main(void) //8
{ //9
cout << Max(16.8, 518) << endl; //10
//11
return 0; // 返回值0, 返回操作系统 //12
} //13
3.下面程序中类的定义中有一处错误,请指出犯错的行,说明错误因素,并加以改正。
#include <iostream> //1
using namespace std; //2
//3
class Integer //4
{ //5
public: //6
Integer(int a = 0): i(a){ } //7
//8
int operator int() //9
{ //10
return i; //11
} //12
//13
private: //14
int i; //15
}; //16
//17
int main(void) //18
{ //19
Integer obj(168); //20
cout << obj << endl; //21
//22
return 0; //23
} //24
六、编程题(本大题26分)
编写程序,定义抽象基类Shape(形状),由它派生出2个派生类:Circle(圆形) 和Rectangle(矩形),用函数Show()分别显示各种图形的相关信息,最后还要显示所有图形的总面积。
C++面向对象程序设计模拟试题三参考答安全
一、单项选择题(本大题共10小题,每小题2分,共20分)在每小题列出的四个备选项中,只有一个是符合题目规定的,请将其代码填写在题后的括号内。错选、多选或未选均无分。
1.C 2.D 3.A 4.B 5.D
6.A 7.C 8.C 9.C 10.A
二、填空题(本大题共5小题,每小题2分,共10分)不写解答过程,将对的的答案写在每小题的空格内。错填或不填均无分。
1.参考答案:int fun() = 0;
2.参考答案:static
3.参考答案:CTest
4.参考答案:构造函数
5.参考答案:private或私有
三、完毕程序填题(本大题共3个小题,每小题3分,共9分)下面程序都留有空白,请将程序补充完整,
1.参考答案:[1]static
2.参考答案:[2] a + i.a或this->a + i.a
3.参考答案:[3] char *
四、程序分析题(本大题共4小题,每小题5分,共20分)给出下面各程序的输出结果。
1.参考答案:
0
5
18
9
98
2.参考答案:
8 2 3 4 5
3.参考答案:
构造A
构造B
构造A
析构B
析构A
4.参考答案:
15.3
1
2
1.1
2.2
五、程序改错题(本大题共3小题,每小题5分,共15分)指出下面程序中的错误,说明错误因素,并加以改正。
1.参考答案:
第7行“a = x, b = y”有错,初始列表的格式错,应改为“a(x), b(y)”。
2.参考答案:
第10行有错,模板函数无隐式转换功能,函数调用Max(16.8, 518)无法拟定参数类型,可第11行的“Max(16.8, 518)”改为“Max(16.8, 518.0)”。
3.参考答案:
第9行“int operator int()”有错,类型转换函数不能有返回值类型,可改为“operator int()”。
六、编程题(本大题26分)
参考程序:
#include <iostream> // 预解决命令
using namespace std; // 使用标准命名空间std
const double PI = 3.1415926; // 定义常量PI
class Shape
{
public:
Shape() { } // 构造函数
virtual ~Shape() { } // 析构函数
virtual Show() = 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 Show() { 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 Show() { cout << "矩形面积:" << length * width << endl; }; // 显示面积
};
double Shape::totalArea = 0; // 初始化totalArea
int main(void)
{
Circle c(1); // 定义圆对象
c.Show(); // 显示面积
Rectangle r(1, 2); // 定义矩形对象
r.Show(); // 显示面积
Shape::ShowTotalArea(); // 显示总面积
return 0; // 返回值0, 返回操作系统
}
展开阅读全文