一、选择题(15×2)
1.B 2.C 3.C 4.D 5.B
6.C 7.B 8.D 9.D 10.D
11.B 12.A 13.B 14.A 15.B
1.D 2.B 3.B 4.A 5.C
6.D 7.C 8.B 9.C 10.A
11.D 12.D 13.C 14.B 15.B
1.A 2.C 3.D 4.B 5.D
6.A 7.A
二、判断题(7×2)
1.√ 2.× 3.× 4.× 5.× 6.× 7.× 8.√ 9.× 10.×
2.√ 12.× 13.√ 14.× 15.√ 16.× 17.× 18.×
三、简答题(4×4)
1.解答要点:
所谓数据的封装,就是将数据结构和作用于数据结构上的操作组成一个实体,数据的表示方式和对数据的操作细节被隐藏起来,用户通过操作接口对数据进行操作。对于用户来说,只知道如何通过操作接口对该数据进行操作,而并不知道是如何操作的,也不知道数据是如何表示的,这就是数据的封装。例如我们经常使用的手机,机壳将零件和线路封装了起来,我们在接打电话或收发短信时是通过手机面板上的按键(接口)。
2.解答要点:
(1) 函数重载是指一个标识符可同时用于为多个函数命名;
(2) 运算符重载是指一个运算符可同时用于多种运算。也就是说,相同名字的函数或运算符在不同的场合可以表现出不同的行为。
(3) 使用重载的目的是为了更好地表达行为共享,可以使程序员在只知道操作的一般含义而不知道操作的具体细节的情况下能正确地对某个对象使用一个操作。另外,使用重载的直接益处是减少了程序员记忆操作名字的负担
3.解答要点:
(1) 用一个对象初始化另一个对象时;
(2) 当用对象作为函数参数传递时;
(3) 当程序中需要创建临时对象时(如函数返回对象时)。
4.解答要点:
(1) 类是一组具有共同的属性特征和行为特征的对象的抽象;
(2) 对象就是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位,由一组属性和一组行为构成。
(3) 类和对象之间的关系是抽象和具体的关系,类是对多个对象进行抽象的结果,对象是类的具体实现。
5.解答要点:
面向对象程序设计是一种新型的程序设计范型。这种范型的主要特征是:程序=对象+消息。面向对象程序设计具有封装性、继承性和多态性。
6.解答要点:
继承所表达的是对象类之间的相关关系,这种关系使得某类对象可以继承另外一类对象的特征和能力。现实生活中,继承是很普遍和容易理解的。例如我们继承了父辈的一些特征,如种族、血型、眼睛的颜色等,父母是我们所具有的属性的基础。
7.解答要点:
类与结构的相同点:
(1)都是用户自定义的数据类型;
(2)都可以有数据成员和函数成员,且成员可以有访问控制。
(3)对成员的访问形式是一样的,都是通过’·’操作符进行访问的。
类与结构的不同点:
(1)结构的成员访问方式默认是public的,而类的成员访问方式默认是private的;
(2)使用的场合有所区别:结构通常被用在比较简单的场合,即没有函数成员,只有数据成员的场合。类的使用比较普及,它可以更好的体现面向对象的思想。
8.解答要点:
拷贝构造函数是用一个对象初始化另一个对象时调用,定义了拷贝构造函数通常涉及到对象内有指针成员,需要定义拷贝构造函数复制指针所指向的内存单元。对象赋值也有同样的问题,如果要将对象指针所指向的内存单元也赋给另一个对象,就必须重载赋值运算符。
9.解答要点:
在面向对象程序设计中,一个对象向另一个对象发出的请求被称为“消息”。消息是一个对象要求另一个对象执行某个功能操作的规格说明,通过消息传递才能完成对象之间的相互请求或相互协作。
10.解答要点:
当对象含有指针数据成员,并用它初始化同类型的另一个对象时,缺省的拷贝构造函数只能将该对象的数据成员复制给另一个对象,而不能将该对象中指针所指向的内存单元也复制过去。这样,就可能出现同一内存单元释放两次,导致程序运行出错。
四、程序分析题(4×6)
1.
错误位置:Point p;
错误原因:当生成无参对象时,缺省参数的构造函数和默认参数的构造函数会产生混淆。
2.
错误位置:c1.friend_f(c2);
错误原因:friend_f()是类的友元函数,应直接调用,而不能用调用对象成员的方式
3.
Exiting main
Destructor is active,number=1
Destructor is active,number=1
4.
Resultl=19
Result2=18
Result3=25
5.
错误位置:p1.age =30;
错误原因:类的对象不能访问类的私有数据成员
6.
错误1位置:int getData() const {return ++data;}
错误1原因:用const 约束的函数是不允许改变数据成员的值的
错误2位置:cout<<"Data is "<错误2原因:此语句是在静态函数getCount()中的,而静态函数不允许访问非静态成员data 7.程序输出结果为: Initalizing default Initalizing default 0 0 Destructor is active Destructor is active 8.程序输出结果为: b=0 a=0 C default constructor b=6 a=5 C constructor 9. n=1, X=12 n=2, X=34 n=1 10. 20,20 五、完成程序题 1. (1) friend class (2) p1(xp1),p2(xp2) 2.参考程序: #include class Box { float a; float volume; float area; public: Box(){} Box(float r){a=r;} void seta(float r){a=r;} void getvolume(){volume=a*a*a;} void getarea(){area=6*a*a;} void disp() { cout<<"体积:"< void main() { Box obj1(4.5),obj2; obj2.seta(6.4); obj1.getvolume(); obj1.getarea(); cout<<"obj1=>"; obj1.disp(); obj2.getvolume(); obj2.getarea(); cout<<"obj2=>"; obj2.disp(); } 3. (1)virtual void printMe()=0 (2)A& a 4. 参考程序: #include #include class Complex { int real,image; public: Complex(){}; Complex(int i,int j=0 ) { real=i; image=j;} friend ostream& operator<<(ostream& os,Complex c) { cout< Complex operator+(Complex c){ return Complex(real+c.real,image+c.image);} }; void main() { Complex c1(1,2),c2(3,-4),c3; c3=c1+c2; cout< 5. (1) Person(s) (2) Person::display(); 《C++程序设计》(高起专)练习题二参 一、选择题 1.C 2.B 3.A 4.B 5.B 6.B 7.D 8.C 9.D 10.B 11.A 12.D 13.A 14.A 15.A 16.B 17.B 18.A 19.C 20.C 21.C 22.D 23.B 24.D 25.C 26.B 27.C 28.D 29.D 30.A 31.C 32.C 33.B 34.C 35.A 36..A 37..D 38..C 二、判断题 1.√ 2.× 3.× 4.× 5.√ 6.× 7.× 8.√ 9.× 10.× 11.× 12.√ 13.× 14.× 15.√ 16. × 17.× 三、简答题(4×4) 1.解答要点: (1) 类是一组具有共同的属性特征和行为特征的对象的抽象; (2) 对象就是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位,由一组属性和一组行为构成。 (3) 类和对象之间的关系是抽象和具体的关系,类是对多个对象进行抽象的结果,对象是类的具体实现。 2.解答要点: 多态性是面向对象程序的重要特征,它是指不同的对象收到相同的消息时产生不同的行为方式。例如我们同样双击windows系统桌面上的图标时,有的是打开媒体播放器,有的是打开D盘,而有的是关机。 3.解答要点: 不一定,派生类覆盖基类的成员函数时,没有virtual关键字,也是虚函数;纯虚函数没有实现,它供派生类覆盖,纯虚函数的一般定义形式为: virtual 返回类型 函数名(参数表) = 0; 至少含有一个纯虚函数的类称为抽象类,抽象类不能定义对象,只能作为基类;多态调用需要满足的条件:(1)被调用的成员函数是虚函数;(2)用指针或引用调用虚函数。 4.解答要点: 结构化的程序设计将数据和对数据的操作分离,程序是由一个个的函数组成的,面向对象的程序设计将数据和操作封装在一起,程序是由一个个对象组成的,对象之间通过接口进行通信,它能够较好地支持程序代码的复用。 5.解答要点: 面向对象程序设计是一种新型的程序设计范型。这种范型的主要特征是:程序=对象+消息。面向对象程序设计具有封装性、继承性和多态性。 6. 解答要点: 继承所表达的是对象类之间的相关关系,这种关系使得某类对象可以继承另外一类对象的特征和能力。现实生活中,继承是很普遍和容易理解的。例如我们继承了父辈的一些特征,如种族、血型、眼睛的颜色等,父母是我们所具有的属性的基础。 7.解答要点: 类与结构的相同点: (1)都是用户自定义的数据类型; (2)都可以有数据成员和函数成员,且成员可以有访问控制。 (3)对成员的访问形式是一样的,都是通过’·’操作符进行访问的。 类与结构的不同点: (1)结构的成员访问方式默认是public的,而类的成员访问方式默认是private的; (2)使用的场合有所区别:结构通常被用在比较简单的场合,即没有函数成员,只有数据成员的场合。类的使用比较普及,它可以更好的体现面向对象的思想。 (3)类支持继承的机制,而结构则不能被继承。 8.解答要点: 对象销毁时,需要调用析构函数。在多态调用时,是用基类的指针访问派生类的对象。如果析构函数是非虚函数,则基类指针只能访问基类的析构函数,而不能访问派生类的析构函数,导致派生类对象销毁时,没有调用派生类的析构函数,只是调用了基类的析构函数。如果把析构函数定义成虚函数,则可克服这个问题。 9.解答要点: (1) 类是一组具有共同的属性特征和行为特征的对象的抽象; (2) 对象就是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位,由一组属性和一组行为构成。 (3) 类和对象之间的关系是抽象和具体的关系,类是对多个对象进行抽象的结果,对象是类的具体实现。 10.解答要点: 类与结构的相同点: (1)都是用户自定义的数据类型; (2)都可以有数据成员和函数成员,且成员可以有访问控制。 (3)对成员的访问形式是一样的,都是通过’·’操作符进行访问的。 类与结构的不同点: (1)结构的成员访问方式默认是public的,而类的成员访问方式默认是private的; (2)使用的场合有所区别:结构通常被用在比较简单的场合,即没有函数成员,只有数据成员的场合。类的使用比较普及,它可以更好的体现面向对象的思想。 四、程序分析题(4×6) 1. 错误语句:int X,Y=20; 错误原因:数据成员不能在类定义中初始化 2. 错误位置:c.y2=-2; 错误原因:y2是常数据成员,而常数据成员的值是不能被改变的。 3.程序输出结果为: B::b: 3 , D::d: 5 4.程序输出结果为: Constructing 10 Destructing 100 Destructing 5. 错误位置:Stack stt; 错误原因:程序中没有定义无参或默认参数的构造函数 6. 错误位置:cout << s.area () < 7. 5 10 3 8. x=1,y=2 x=30,y=40 9. 错误位置:A(int aa=0, int bb){ 错误原因:函数的默认参数应从右至左提供 10. 错误位置:this.x=x; 错误原因:用this指针访问对象的数据成员时应使用指针访问运算符“->”,即 this->x=x; 五、完成程序题 1. (1) friend Integer Max(Integer a,Integer b); (2) a.x>b.x 2.参考程序: #include #include class Triangle { int x,y,z; double area; public: Triangle(int i,int j,int k) { double s; x=i;y=j;z=k; s=(x+y+z)/2.0; area=sqrt(s*(s-x)*(s-y)*(s-z)); } void disparea() { cout<<"Area="<friend double operator+(Triangle t1,Triangle t2) { return t1.area+t2.area; } }; void main() { Triangle t1(3,4,5),t2(4,5,6); double s; cout<<"t1:"; t1.disparea(); cout<<"t2:"; t2.disparea(); s=t1+t2; cout<<"总面积="< 3. (1) base(i) (2) base(b) 4.参考程序: #include template T max(T x[],int n) { int i; T maxv=x[0]; for(i=1;i return maxv; } void main() { int a[]={4,5,2,8,9,3}; double b[]={3.5,6.7,2,5.2,9.2}; cout<<"a数组最大值:"< 5.参考程序: #include #include class circle { double radius; public: circle(double r) { radius=r; } double getarea() { return radius*radius*3.14; } }; class table { double height; public: table(double h) { height=h; } double getheight() { return height; } }; class roundtable : public table,public circle { char *color; public: roundtable(double h, double r, char c[]) : circle (r) , table (h) { color=new char[strlen(c)+1]; strcpy (color, c); } char *getcolor() { return color; } }; void main() { roundtable rt(0.8,1.2,"黑色"); cout << "圆桌属性:" << endl; cout << "高度:" <}