面向对象程序设计 练习题1



《面向对象程序设计 练习题1》由会员分享,可在线阅读,更多相关《面向对象程序设计 练习题1(8页珍藏版)》请在装配图网上搜索。
1、面向对象程序设计(C++描述)—练习题1 一、判断题(1分×5=5分),正确的打“√”,错误的打“×”。答1、类的静态成员函数可以访问类的实例数据成员。……………………………(F) 2、this指针是隐含于每一个类的成员函数中的特殊指针,但不包括构造函数和析构函数)。…………………………………………………………………………………(F) 3、若类A是类B的友元类,则类B也是类A的友元类。………………………(F) 4、在C++中可以使用throw重抛异常。 …………………………………………(T) 5、命名空间是用来限定名称的解析和使用范围的,以解决命名冲突。…………(T) 二、选择题(
2、1.5分×30=45分),每题有四个选项,请将最佳的选项填写到下面表格中。
1、下面代码使用文件流,以“写”方式打开文件myfile.txt不正确的是……(D)
A、ofstream outfile; outfile.open("myfile.txt", ios::out);
B、ofstream outfile("myfile.txt");
C、fstream outfile("myfile.txt", ios::out);
D、ifstream outfile("myfile.txt");
2、考虑下列程序:
#include
3、ace std; int main( ){ bool bFlag = true; int i = 2010; while(bFlag); { if(i%2 == 0) { cout << “偶数” << endl; bFlag = false; } else { cout << “奇数 ”; i++; } } } 关于编译上述程序下列哪个正确?……………………………………(D) A、程序编译成功,执行后输出“偶数”。 B、程序编译成功,执行后没有输出。 C、程序编译成功,执行后输出“奇数 偶数”。D、程序编译不
4、成功,产生一些错误。
3、在语句 cout << data; 中,cout是…………………………………(D)
A、C++的关键字 B、类名 C、函数名 D、对象名
4、分析下列程序:
#include
5、用构造函数!”。
B、程序编译成功,执行后没有输出。
C、程序编译失败。
D、程序编译成功,执行后输出一组废字符。
5、已知 int x = 5; 则下列表示引用的方法中,正确的是…………………(D)
A、int &r; B、int &r = 5; C、int &r = &x; D、float &r = x;
6、考虑下列程序:
#include
6、Derived : protected CBase {
public:
~CDerived( ) { cout << ”TIGERS ”; }
};
int main( ) { CDerived obj;}
程序执行后输出为……………………………………………(A)
A、CATS TIGERS B、TIGERS CATS C、CATS D、TIGERS
7、考虑下列程序:
#include
7、}; class CB { public: void func( ) { cout << ”Call B”; } }; class CC : public CA, public CB { public: virtual void func( ) { cout << ”Call C”; } }; int main( ) { CA *ptr = new CC; ptr->func( ); } 关于编译上述程序下列哪条语句正确?……………………………(A) A、程序成功编译,执行后输出”Call C”。 B、程序编译错误。 C、程序成功编译,执行后没输出。 D、程序
8、成功编译,执行后输出”Call B”。 8、下列哪个函数说明表示后缀一元运算符++的重载?………………(A) A int operator++(int) B int operator++( ) C int operator++(int &) D int operator++(void &) 9、在C++中,下面四组代码中的函数说明: Group 1: class CA { void print( ); void print( ) const; } Group 2: char func(int, cha
9、r); int func(int, char); Group 3: float add(float, int); float add(int, float); Group 4: int square(int); float square(int*); 哪组不是重载的函数?………………………………………………………(B) A Group 1 B Group 2 C Group 3 D Group 4 10、在int b[ ][4] = {{1},{4,3,2,1},{4,5,6,7},{0}}; 中b[1][2]的值是…(
10、B) A、4 B、2 C、5 D、0 11、考虑函数原型void test(int a = 0, char* p = "*"),下面的函数调用中,属于不合法调用的是………………………………………………………………(C) A、test(); B、test(1); C、test(, "#"); D、test(1, "*"); 12、下面有关函数重写的说法中正确的是……………………………………(D) A、重写函数必须具有不同的返回值类型。B、重写函数的函数名可以不同。 C、重写函数必须有不同的形参列表。
11、 D、重写函数和被重写函数在不同类中。 13、下列关于构造函数的描述中,错误的是………………………………(D) A、构造函数可以设置默认参数。 B、构造函数可以不带参数。 C、构造函数可以是内联函数。 D、构造函数不可以重载。 14、下面描述中,表达错误的是………………………………………………(A) A、保护继承时基类中的public成员在派生类中仍是public的。 B、私有继承时派生类中的成员函数可以直接访问基类中的protected成员。 C、私有继承时基类中的public成员在派生类中是private的。 D、公有继承时基类中的protected成员在派生类中仍
12、是protected的。 15、下面选项中不属于面向对象程序设计特征的是………………(C) A、继承性 B、多态性 C、类比性 D、封装性 16、以下选项中,与语句 x = y++ 完全等价的表达式是…………(D) A、x += y + 1; B、y = y + 1, x = y; C、x = ++y; D、x = y, y = y + 1; 17、下列关于运算符重载的描述中,错误的是………………………(B) A、运算符重载不可以改变结合性。 B、运算符
13、重载可以改变语法结构。 C、运算符重载不可以改变操作数的个数。 D、运算符重载不可以改变运算符的优先级。 18、对类的构造函数和析构函数描述正确的是………………………(D) A、构造函数不能重载,析构函数也不能重载。 B、构造函数可以重载,析构函数也可以重载。 C、构造函数不能重载,析构函数可以重载。 D、构造函数可以重载,析构函数不能重载。 19、设变量i的数据类型是int,f的数据类型是float,d的数据类型是double,则表达式10 + 'i' + d * f值的数据类型为……………………………………………(C) A、int B、float
14、 C、double D、不确定 20、下列关于抽象类的描述中,不正确的是…………………………(D) A、在程序中不能说明抽象类的对象。 B、在程序中可以声明指向抽象类对象的指针。 C、含有纯虚函数的类称为抽象类。 D、抽象类有且只能有一个纯虚函数。 21、关于函数的调用下面不正确的是……………………………(A) A、由于程序总是从主函数开始,所以函数的调用总是在主函数和其他函数之间进行。 B、函数的调用可以在任意函数之间进行,只要有需要。 C、一个函数可以自己调用自己。 D、函数返回时可以不必带返回值,这时函数在定义时其类型应用void表示。
15、 22、当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员,说明继承具有……………………………………………(B) A、规律性 B、传递性 C、重复性 D、多样性 23、派生类的构造函数的成员初始化列表中,不能包含……………(C) A、基类的构造函数 B、派生类中内嵌对象的初始化 C、基类的内嵌对象初始化 D、派生类中一般数据成员的初始化 24、派生类的对象对它的基类成员中可以访问的成员是………………(D) A、私有继承的保护成员 B、公有继承的保护成员 C、私有继承的公有成员 D、公有继承的公有成员 25、下面关
16、于break语句的描述中,不正确的是………………………(D) A、break可以用于循环体内。 B、break语句可以在for循环语句中出现多次。 C、break语句可以在switch语句中出现多次。 D、break语句可用于if条件判断语句内。 26、下面哪种情况不一定会调用拷贝构造函数………………………(C) A、当用类的一个对象去初始化该类的另一个对象时。 B、若函数的形参为类对象,调用函数时,实参赋值给形参时。 C、当用类实例化对象时。 D、当函数的返回值是类对象时。 27、给对象取一个别名,引入对象的同义词的是………………(B) A、指针
17、 B、引用 C、枚举 D、结构 28、有关析构函数的说法,错误的是………………………………………(C) A、析构函数有且只有一个。 B、析构函数无任何函数类型。 C、析构函数和构造函数一样可以有形参。 D、析构函数的作用是在对象被撤销时收回先前分配的内存空间。 29、通常的拷贝初始化构造函数的参数是……………………………(C) A、某个对象名 B、某个对象的成员名 C、某个对象的引用名 D、某个对象的指针名 30、有以下类的说明,请指出错误的地方…………………………………(A) class CSample
18、 {
int a = 2;
public:
CSample(int iVal);
CSample( );
~CSample( );
};
A、int a = 2; B、CSample();
C、CSample(int iVal); D、~CSample();
三、写出程序的输出结果(共10分)。
1、仔细阅读下面程序代码,写出程序的输出结果。(2分)
#include
19、 c; public: CBase(char n) :c(n){ } virtual ~ CBase( ) { cout << c << endl;} }; class CDerived :public CBase { char c; public: CDerived(char n) :CBase(n+1), c(n) { } ~ CDerived( ) { cout << c << endl;} }; int main( ) { CDerived obj(’X’);} 执行上面的程序,输出结果为: (1)
20、X
(2) Y
2、仔细阅读下面程序代码,写出程序的输出结果。(8分)
#include
21、Point (Point& p) { X = p.X; Y = p.Y; cout << "类Point的拷贝构造函数被调用“ << endl; } class Line { public: Line(Point xp1, Point xp2); Line(Line& ln); private: Point p1, p2; }; Line::Line(Point xp1, Point xp2): p1(xp1), p2(xp2) { cout << "类Line的构造函数被调用“ << end
22、l; } Line::Line(Line& ln): p1(ln.p1), p2(ln.p2) { cout << "类Line的拷贝构造函数被调用“ << endl; } int main() { Point p1(1, 1), p2(3, 4); Line ln1(p1, p2); Line ln2(ln1); } 执行上面的程序,输出结果为: (1) 类Point的拷贝构造函数被调用 (2) 类Point的拷贝构造函数被调用 (3) 类Point的拷贝构造函数被调用 (4) 类Point的拷贝构造函数被调用
23、 (5) 类Line的构造函数被调用 (6) 类Point的拷贝构造函数被调用 (7) 类Point的拷贝构造函数被调用 (8) 类Line的拷贝构造函数被调用 四、解答题(共20分)。 1、(10分)根据下面描述的类的关系,绘制出相应的UML图形。 class CDate { }; class CStudent { private: CDate birth; string name; public: }; 答: CDate CStudent - birth : CDa
24、te - name : string 2、(10分)根据下面的UML图形,使用C++语言写出相应的程序代码。 CEmployee # m_individualEmpNo : int # m_grade : int # m_accumPay : float + CEmployee() + ~CEmployee() + IncreaseEmpNo(no : int) : void + GetindividualEmpNo() : int 答: class CEmployee { protected: int m_individualEmpNo
25、; int m_grade; float m_accumPay; public: CEmployee(); ~CEmployee(); void IncreaseEmpNo(int no); int GetindividualEmpNo(); }; 五、编程题(共20分)。 1、(7分)根据程序要求,实现程序编码。 声明一个异常类CMyException,有成员函数Reason( ),用来显示异常的类型。定义函数func( )触发异常,在主函数的try模块中调用func( ),在catch模块中捕获异常,观察程序的执行流程。
26、
答:
#include
27、out << "进入主函数" << endl; try { cout << "在try模块中,调用子函数func( )" << endl; func( ); } catch(CMyException ex) { cout << "在catch模块中,捕获到CMyException类型异常:"; cout << ex.Reason( ) << endl; } catch(char *str) { cout << "捕获到其他异常:" << str << endl; } cout << "回到主函数,异常已被处理!" << endl
28、; } 2、(13分)根据程序要求,实现程序编码。 编写一个程序,设计一个空间三维点类CMyPoint,即一个空间点有三个坐标。包含: (1)私有数据成员:float x、float y和float z。 (2)公有函数成员:带三个默认参数的构造函数CMyPoint(float xx = 0.0, float yy = 0.0, float zz = 0.0);、一个拷贝构造函数CMyPoint(CMyPoint & pt);、一个将点变为负值的函数CMyPoint Negate( );、一个返回该点到原点(0, 0, 0)距离的函数float Distance( );和一个输出
29、点坐标的函数void Print( );。
答:
#include
30、 float x, y, z; }; CMyPoint::CMyPoint(float xx, float yy, float zz) { x = xx; y = yy; z = zz; } CMyPoint::CMyPoint(CMyPoint & pt) { x = pt.x; y = pt.y; z = pt.z; } CMyPoint CMyPoint::Negate( ) { CMyPoint pt; pt.x = -x; pt.y = -y; pt.z = -z; return pt; } float CMyPoint::Distance( ){ return sqrt(x*x + y*y + z*z); } void CMyPoint::Print( ) { cout << "x = " << x << endl << "y = " << y << endl << "z = " << z << endl; }
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年水电工程运行维护管理合同示范文本.docx
- 2025年工程勘测设计合同模板.docx
- 2025年区域产品销售代理合同.docx
- 2025年经销商授权合同样本.docx
- 2025年员工住房资金借贷合同.docx
- 2025年轻钢建筑施工合同示例.docx
- 2025年网络推广托管合同.docx
- 2025年简明个人借款正式合同范例.docx
- 2025年房产按揭贷款合同范例.docx
- 2025年技术合同争议调解.docx
- 2025年电子版城市住宅租赁合同范本.docx
- 2025年简易转让合同协议书样本.docx
- 2025年投资顾问服务合同实例.docx
- 2025年经销合同模板.docx
- 2025年工业项目设计合同样本.docx