当前位置:文档之家› c类和对象练习题

c类和对象练习题

c类和对象练习题Standardization of sany group #QS8QHH-HHGX8Q8-GNHHJ8-HHMHGN#第8章类与对象8.1知识要点1.掌握类与对象的概念和定义方法,掌握类成员的访问属性。

2.掌握构造函数的概念、定义方法和使用方法。

3.掌握析构函数的概念、定义方法和使用方法。

4.掌握拷贝构造函数的概念、定义方法和使用方法。

5.掌握包含对象成员的类构造函数的定义方法。

6.掌握静态成员的概念、定义方法、作用和特点。

7.掌握友元的概念、定义方法、作用和特点。

8.掌握类模板的定义格式与使用方法。

8.2典型例题分析与解答例题1:下列有关类的说法不正确的是()。

A.对象是类的一个实例B.任何一个对象只能属于一个具体的类C.一个类只能有一个对象D.类与对象的关系和数据类型与变量的关系相似答案:C分析:对象是类的一个实例,类与对象的关系和数据与变量的关系相似,所以一个类可以有多个对象。

例题2:下面()项是对构造函数和析构函数的正确定义。

A.void X::X(), void X::~X()B.X::X(参数),X::~X()C.X::X(参数),X::~X(参数)D.void X::X(参数),void X::~X(参数)答案:B分析构造函数无返回类型、可带参数、可重载;析构函数无返回类型、不可带参数、不可重载。

例题3:()的功能是对象进行初始化。

A.析构函数B. 数据成员 C.构造函数 D.静态成员函数答案:C分析:当一个对象定义时,C++编译系统自动调用构造函数建立该对象并进行初始化;当一个对象的生命周期结束时,C++编译系统自动调用析构函数注销该对象并进行善后工作;例题4:下列表达方式正确的是()。

A.class P{B.class P{public: public:int x=15; int x;voidshow(){cout<<x;} void show(){cout<<x;}}; }C. class P{ D. class P{intf; public:}; int a;f=25; void Seta (int x) {a=x;}答案:D分析:在类体内不可对数据成员进行初始化;类定义结束时需用分号;只有类中的成员函数才能存取类中的私有数据。

例题5:拷贝构造函数具有的下列特点中,()是错误的。

A.如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的B.拷贝构造函数只有一个参数,并且是该类对象的引用C.拷贝构造函数是一种成员函数D.拷贝构造函数的名字不能用类名答案:D分析:如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的;拷贝构造函数只有一个参数,并且是该类对象的引用;拷贝构造函数的名字与类同名,并且不被指定返回类型;拷贝构造函数是一种成员函数。

例题6:关于静态成员的描述中,()是错误的。

A.静态成员可分为静态数据成员和静态成员函数B.静态数据成员定义后必须在类体内进行初始化C.静态数据成员初始化不使用其构造函数D.静态数据成员函数中不能直接引用非静态成员答案:B分析:静态成员可分为静态数据成员和静态成员函数;静态数据成员被定义后,必须对它进行初始化,初始化在类体外进行,一般放在该类的实现部分最合适,也可以放在其他位置,例如,放在主函数前面等;静态数据成员初始化与该类的构造函数和析构函数无关;在静态成员函数的实现中,可以直接引用静态成员,但不能直接引用非静态成员。

例题7:关于友元的描述中,()是错误的。

A.友元函数是成员函数,它被说明在类体内B.友元函数可直接访问类中的私有成员C.友元函数破坏封装性,使用时尽量少用D.友元类中的所有成员函数都是友元函数答案:A分析:友元函数是非成员函数,在类体内说明了,在类体外定义,定义和调用等同于一般的普通函数;由于它可以直接访问类的私有成员,因此破坏了类的封装性和隐藏性,尽量少用。

例题8:设有如下程序结构:class Box{ … };void main(){Box A,B,C; }该程序运行时调用 (1) 次构造函数;调用 (2) 次析构函数。

答案:(1)3(2)3分析:每创建一个对象自动调用一次构造函数,在这里创建了A、B、C三个对象,所以共调用了三次构造函数;每释放一个对象,系统自动调用一次析构函数,A、B、C对象释放时,分别调用析构函数,所以析构函数共调用了三次。

例题9:设A为test类的对象且赋有初值,则语句test B(A); 表示。

答案:将对象A复制给对象B。

分析:执行test B(A);语句相当于调用了默认复制构造函数,将A对象的属性复制给B 对象。

例题10:利用“对象名.成员变量”形式访问的对象成员仅限于被声明为 (1)的成员;若要访问其他成员变量,需要通过 (2) 函数或 (3) 函数。

答案:(1) public (2) 成员函数 (3)友元函数分析:类体内的数据成员可声明为公有的、私有的和保护的,公有的数据成员可利用“对象名.成员变量”形式来进行访问;私有的数据成员能被类中的其他成员函数或友元函数所调用;保护的数据成员可以在类体中使用,也可以在派生类中使用,但不能在其他类外通过对象使用。

例题11:分析找出以下程序中的错误,说明错误原因,给出修改方案使之能正确运行。

#include<>class one{ int a1,a2;public:one(int x1=0, x2=0);};void main(){one data(2,3);cout<<<<endl;cout<<<<endl;}分析:出错原因:构造函数参数表语法错;构造函数没有函数体;类的对象不能直接访问类的私有成员变量。

改正后的程序如下:#include<>class one{ int a1, a2;public:one(int x1=0, int x2=0) {a1=x1;a2=x2;}int geta1(){ return a1; }int geta2(){ return a2; }};void main(){one data(2,3);cout<<()<<endl;cout<<()<<endl;}例题12:分析以下程序的错误原因,给出修改方案使之能正确运行。

#include <>class Amplifier{float invol,outvol;public:Amplifier(float vin,float vout){invol=vin;outvol=vout;}float gain();};Amplifier::float gain(){ return outvol/invol; }void main(){Amplifier amp,;cout<<"\n\nThe gain is =>"<<gain()<<endl;}分析:成员函数在类体外定义格式是:函数返回类型类名::成员函数名(参数表);成员函数调用格式是:对象名.成员函数名(参数表)。

改正后的程序如下:#include <>class Amplifier{ float invol,outvol;public:Amplifier(float vin,float vout) {invol=vin;outvol=vout;}float gain();};float Amplifier::gain(){ return outvol/invol;}void main(){ Amplifier amp,;cout<<"\n\nThe gain is =>"<<()<<endl;}例题13:下列程序的运行结果是。

#include <>class point{int x,y;public:point(int a,int b){x=a;y=b;cout<<"calling the constructor function."<<endl;}point(point &p);friend point move(point q);~point(){cout<<"calling the destructor function.\n";}int getx(){return x;}int gety() {return y;}};point::point(point &p){x=;y=;cout<<"calling the copy_initialization constructor function.\n";}point move(point q){cout<<"OK!\n";int i,j;i=+10;j=+20;point r(i,j);return r;}void main(){ point m(15,40),p(0,0);point n(m);p=move(n);cout<<"p="<<()<<","<<()<<endl;}分析:根据构造函数、拷贝构造函数和友元函数的特点,执行该程序后,输出结果是:calling the constructor function.calling the constructor function.calling the copy_initialization constructor function.calling the copy_initialization constructor function.OK!calling the constructor function.calling the copy_initialization constructor function.calling the destructor function.calling the destructor function.calling the destructor function.P=25,60calling the destructor function.calling the destructor function.calling the destructor function.说明:(1)构造函数执行三次,分别初始化主函数中的对象m,p和move函数中的对象r。

相关主题