资源描述
C++面向对象程序设计模拟试题七
一、单项选择题(本大题共10小题,每小题2分,共20分)在每小题列出的四个备选项中,只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。
1.下列语句中,错误的是( )。
A)const int buffer = 168; B)const int num;
C)const double *p; D)double * const p = new double;
2.C++中的模板包括( )。
A)对象模板和函数模板 B)对象模板和类模板
C)函数模板和类模板 D)变量模板和对象模板
3.对于常对象,C++遵循( )。
A)通过常对象可以调用常成员函数
B)通过常对象可以所有成员函数
C)常对象的成员都是常成员
D)通过常对象可以调用任何不改变对象值的成员函数
4.以下关键字不能用来声明类的访问权限的是( )。
A)public B)static C)protected D)private
5.下列关于this指针的叙述中,正确的是( )。
A)与类相关的所有函数都含有this指针
B)所有类的成员函数都有this指针
C)所有函数都有this指针
D)只有类的非静态成员函数才有this指针
6.派生类的成员函数不能直接访问基类的( )。
A)保护成员 B)公有成员
C)私有成员 D)前面各选项都正确
7.在下列函数原型中,可以作为类Test构造函数的是( )。
A)void Test (int); B)int Test ();
C)~Test (int); D)Test (int);
8.在下面4个关键字中,用于说明虚基类的是( )。
A)virtual B)public
C)protected D)private
9.在C++中,用于实现编译时多态性的是( )。
A)友元函数 B)重载函数
C)静态成员函数 D)虚函数
10.下列关于C++函数的说明中,正确的是( )。
A)内置函数就是定义在另一个函数体内部的函数
B)函数体的最后一条语句必须是return语句
C)C++标准要求在调用一个函数之前,如果没定义函数,则必须先声明其原型
D)编译器会根据函数的返回值类型和参数表来区分函数的不同重载形式
二、填空题(本大题共5小题,每小题2分,共10分)不写解答过程,将正确的答案写在每小题的空格内。错填或不填均无分。
1.一个函数名为Show,返回值类型为void,没有参数的纯虚常成员函数可以声明为( )。
2.若将一个二元运算符重载为类的友员函数,其形参个数应该是( )个。
3.采用struct定义的类中数据成员和成员函数的默认访问权限是( )。
4.在面向对象方法中,( )描述的是具有相同属性与操作的一组对象。
5.模板类型形参表使用的关键字为( )。
三、程序分析题(本大题共6小题,每小题5分,共30分)给出下面各程序的输出结果。
1.阅读下面程序,写出输出结果。
#include <iostream>
using namespace std;
class Test
{
private:
int n;
public:
Test(int i = 16) { n = i; }
int Get() { return n; }
int Get() const { return n - 2; }
};
int main()
{
Test a;
const Test b(18);
cout << a.Get() << "," << b.Get() << endl;
return 0;
}
上面程序的输出结果为:
2.阅读下面程序,写出输出结果。
#include <iostream>
using namespace std;
class A
{
public:
A() { cout << "A" << endl; }
~A() { cout << "~A" << endl; }
};
class B: A
{
public:
B() { cout << "B" << endl; }
~B() { cout << "~B" << endl; }
};
int main()
{
B obj;
return 0;
}
上面程序的输出结果为:
3.阅读下面程序,写出输出结果。
#include <iostream>
using namespace std;
int f(int a) { return a * a + 8; }
template <class T>
T f(const T &a) { return a * a; }
int main()
{
cout << f(1) << "," << f(1.0) << endl;
return 0;
}
上面程序的输出结果为:
4.阅读下面程序,写出输出结果。
#include <iostream>
using namespace std;
namespace ns
{
int x = 18;
}
int x = 5;
int main()
{
int x = 10;
cout << x << " " << ::x << " " << ns::x << endl;
return 0;
}
上面程序的输出结果为:
5.阅读下面程序,写出输出结果。
#include <iostream>
using namespace std;
class A
{
public:
virtual void Show() const { cout << "A::Show()" << endl; }
};
class B: public A
{
public:
void Show() const { cout << "B::Show()" << endl; }
};
void Refers(const A &obj)
{
obj.Show();
}
int main()
{
A obj1;
B obj2;
Refers(obj1);
Refers(obj2);
return 0;
}
上面程序的输出结果为:
6.阅读下面程序,写出输出结果。
#include <iostream>
using namespace std;
class A
{
protected:
int a;
public:
A(int x): a(x) {}
void Show() const { cout << a << endl; }
};
class B: public A
{
protected:
int b;
public:
B(int x, int y): A(x), b(y) {}
void Show() const { cout << b << endl; }
};
int main()
{
B obj(18, 5);
obj.Show();
obj.A::Show();
return 0;
}
上面程序的输出结果为:
四、完成程序填题(本大题共4个小题,每小题3分,共12分)下面程序都留有空白,请将程序补充完整。
1.将如下程序补充完整。
#include <iostream>
using namespace std;
class Integer
{
private:
int n;
public:
Integer(int n): n(n) { }
Integer & [1] { --n; return *this; } // 重载前缀--运算符
void Show() const { cout << n << endl; }
};
int main()
{
Integer i(168);
--i;
i.Show();
return 0;
}
2.将如下程序补充完整。
#include <iostream>
using namespace std;
class A
{
private:
int a;
public:
A(int m = 0): a(m) {}
[2] // 类型转换函数,A类对象转转成int型量
{ return a; }
};
int main()
{
A a = 8.14;
cout << a << endl;
return 0;
}
3.将如下程序补充完整。
#include <iostream>
using namespace std;
class A
{
private:
int m;
public:
A(int a): m(a){ }
virtual void Show() const { cout << m << endl; }
};
class B: public A
{
private:
int n;
public:
B(int a, int b): A(a) { n = b; }
void Show() const { cout << n << endl; }
};
int main()
{
B obj(158, 98);
[2] Show(); // 调用基类的Show()
return 0;
}
4.将如下程序补充完整。
#include <iostream>
using namespace std;
class Complex
{
private:
double realPart;
double imagePart;
public:
Complex(double real = 0, double image = 0): realPart(real), imagePart(image){ }
Complex [3] (const Complex &a) const // 重载减法运算符+
{ return Complex(realPart - a.realPart, imagePart - a.imagePart); }
void Show() const { cout << realPart << "+" << imagePart << "i" << endl;}
};
int main()
{
Complex a(2, 9), b(1, 1), c;
c = a - b;
cout << "a="; a.Show();
cout << "b="; b.Show();
cout << "c="; c.Show();
return 0;
}
五、编程题(本大题共2小题,第1小题12分,第2小题16分,共28分)
1.试使用函数模板实现求一个数组各元素的积,要求编写测试程序。
函数模板声明如下:
template <class Type>
Type Mul(Type a[], int n); // 求数组a各元素的积
2.设计一个日期类Date,,要求:
(1)包含年(year)、月(month)和日(day)私有数据成员。
(2)包含构造函数,重载输出运算符“<<”与重载输入运算符“>>”。
要求编写测试程序。
C++面向对象程序设计模拟试题七参考答案
一、单项选择题(本大题共10小题,每小题2分,共20分)在每小题列出的四个备选项中,只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。
1.B) 2.C) 3.A) 4.B) 5.D)
6.C) 7.D) 8.A) 9.B) 10.C)
二、填空题(本大题共5小题,每小题2分,共10分)不写解答过程,将正确的答案写在每小题的空格内。错填或不填均无分。
1.参考答案:virtual void Show() const = 0;
2.参考答案:2
3.参考答案:public或公有
4.参考答案:类
5.参考答案:class
三、程序分析题(本大题共6小题,每小题5分,共30分)给出下面各程序的输出结果。
1.参考答案:16,16
2.参考答案:
A
B
~B
~A
3.参考答案:9,1
4.参考答案:10 5 18
5.参考答案:
A::Show()
B::Show()
6.参考答案:
5
18
四、完成程序填题(本大题共4个小题,每小题3分,共12分)下面程序都留有空白,请将程序补充完整。
1.参考答案:[1] operator--()
2.参考答案:[2] operator int() const或operator int()
3.参考答案:[3] obj.A::
4.参考答案:[4] operator-
五、编程题(本大题共2小题,第1小题12分,第2小题16分,共28分)
1.参考程序:
#include <iostream>
using namespace std;
template <class Type>
Type Mul(Type a[], int n) // 求数组a各元素的积
{
Type t = 1;
for (int i = 0; i < n; i++)
t *= a[i];
return t;
}
int main()
{
int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
cout << Mul(a, 9) << endl;
return 0;
}
2.参考程序:
#include <iostream>
using namespace std;
class Date
{
private:
int year;
int month;
int day;
public:
Date(int y = 2010, int m = 1, int d = 1):year(y), month(m), day(d){}
void SetYear(int y) { year = y; }
void SetMonth(int m) { month = m; }
void SetDay(int d) { day = d; }
int GetYear() const { return year; }
int GetMonth() const { return month; }
int GetDay() const { return day; }
};
istream &operator>>(istream &in, Date &dt)
{
int y, m, d;
cout << "输入年:";
in >> y;
cout << "输入月:";
in >> m;
cout << "输入日:";
in >> d;
dt.SetYear(y);
dt.SetMonth(m);
dt.SetDay(d);
return in;
}
ostream &operator<<(ostream &out, const Date &dt)
{
cout << dt.GetYear() << "年" << dt.GetMonth() << "月" << dt.GetDay() << "日";
return out;
}
int main()
{
Date d;
cin >> d;
cout << d << endl;
return 0;
}
其中专业理论知识内容包括:保安理论知识、消防业务知识、职业道德、法律常识、保安礼仪、救护知识。作技能训练内容包括:岗位操作指引、勤务技能、消防技能、军事技能。
二.培训的及要求培训目的
安全生产目标责任书
为了进一步落实安全生产责任制,做到“责、权、利”相结合,根据我公司2015年度安全生产目标的内容,现与财务部签订如下安全生产目标:
一、目标值:
1、全年人身死亡事故为零,重伤事故为零,轻伤人数为零。
2、现金安全保管,不发生盗窃事故。
3、每月足额提取安全生产费用,保障安全生产投入资金的到位。
4、安全培训合格率为100%。
二、本单位安全工作上必须做到以下内容:
1、对本单位的安全生产负直接领导责任,必须模范遵守公司的各项安全管理制度,不发布与公司安全管理制度相抵触的指令,严格履行本人的安全职责,确保安全责任制在本单位全面落实,并全力支持安全工作。
2、保证公司各项安全管理制度和管理办法在本单位内全面实施,并自觉接受公司安全部门的监督和管理。
3、在确保安全的前提下组织生产,始终把安全工作放在首位,当“安全与交货期、质量”发生矛盾时,坚持安全第一的原则。
4、参加生产碰头会时,首先汇报本单位的安全生产情况和安全问题落实情况;在安排本单位生产任务时,必须安排安全工作内容,并写入记录。
5、在公司及政府的安全检查中杜绝各类违章现象。
6、组织本部门积极参加安全检查,做到有检查、有整改,记录全。
7、以身作则,不违章指挥、不违章操作。对发现的各类违章现象负有查禁的责任,同时要予以查处。
8、虚心接受员工提出的问题,杜绝不接受或盲目指挥;
9、发生事故,应立即报告主管领导,按照“四不放过”的原则召开事故分析会,提出整改措施和对责任者的处理意见,并填写事故登记表,严禁隐瞒不报或降低对责任者的处罚标准。
10、必须按规定对单位员工进行培训和新员工上岗教育;
11、严格执行公司安全生产十六项禁令,保证本单位所有人员不违章作业。
三、 安全奖惩:
1、对于全年实现安全目标的按照公司生产现场管理规定和工作说明书进行考核奖励;对于未实现安全目标的按照公司规定进行处罚。
2、每月接受主管领导指派人员对安全生产责任状的落
其中专业理论知识内容包括:保安理论知识、消防业务知识、职业道德、法律常识、保安礼仪、救护知识。作技能训练内容包括:岗位操作指引、勤务技能、消防技能、军事技能。
二.培训的及要求培训目的
安全生产目标责任书
为了进一步落实安全生产责任制,做到“责、权、利”相结合,根据我公司2015年度安全生产目标的内容,现与财务部签订如下安全生产目标:
一、目标值:
1、全年人身死亡事故为零,重伤事故为零,轻伤人数为零。
2、现金安全保管,不发生盗窃事故。
3、每月足额提取安全生产费用,保障安全生产投入资金的到位。
4、安全培训合格率为100%。
二、本单位安全工作上必须做到以下内容:
1、对本单位的安全生产负直接领导责任,必须模范遵守公司的各项安全管理制度,不发布与公司安全管理制度相抵触的指令,严格履行本人的安全职责,确保安全责任制在本单位全面落实,并全力支持安全工作。
2、保证公司各项安全管理制度和管理办法在本单位内全面实施,并自觉接受公司安全部门的监督和管理。
3、在确保安全的前提下组织生产,始终把安全工作放在首位,当“安全与交货期、质量”发生矛盾时,坚持安全第一的原则。
4、参加生产碰头会时,首先汇报本单位的安全生产情况和安全问题落实情况;在安排本单位生产任务时,必须安排安全工作内容,并写入记录。
5、在公司及政府的安全检查中杜绝各类违章现象。
6、组织本部门积极参加安全检查,做到有检查、有整改,记录全。
7、以身作则,不违章指挥、不违章操作。对发现的各类违章现象负有查禁的责任,同时要予以查处。
8、虚心接受员工提出的问题,杜绝不接受或盲目指挥;
9、发生事故,应立即报告主管领导,按照“四不放过”的原则召开事故分析会,提出整改措施和对责任者的处理意见,并填写事故登记表,严禁隐瞒不报或降低对责任者的处罚标准。
10、必须按规定对单位员工进行培训和新员工上岗教育;
11、严格执行公司安全生产十六项禁令,保证本单位所有人员不违章作业。
三、 安全奖惩:
1、对于全年实现安全目标的按照公司生产现场管理规定和工作说明书进行考核奖励;对于未实现安全目标的按照公司规定进行处罚。
2、每月接受主管领导指派人员对安全生产责任状的落
展开阅读全文