1、:X(),X()X:X( 参数 ),X( 参数)DX( 参数 ), void X:X( 参数 )B分析构造函数无返回类型、可带参数、可重载;析构函数无返回类型、不可带参数、不可重 载。例题 3:( )的功能是对象进行初始化例题 4:下列表达方式正确的是 ()。A class P B class Ppublic :publicint x=15 ;int x;void show()coutx ;C class P D.class Pint f; publicint af=25 ;void Seta (int x) a=x; D当一个对象定义时, 个对象的生命周期结束时,C+编译系统自动调用构造函数
2、建立该对象并进行初始化;当一C+ +编译系统自动调用 析构函数注销该对象并进行善后工作; 在 类体内不可对数据成员进行初始化 (从类对象区别于其数据成员解释 );类定义结束 时需用分号; 只有类中的成员函数才能存取类中的私有数据。例题 5:拷贝构造函数具有的下列特点中, ()是错误的。如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的拷贝构造函数只有一个参数,并且是该类对象的引用拷贝构造函数是一种成员函数拷贝构造函数的名字不能用类名如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的;拷贝构造 函数只有一个参数,并且是该类对象的引用;拷贝构造函数的名字与类同名,并且不被 指定
3、返回类型;拷贝构造函数是一种成员函数。例题6:关于静态成员的描述中, ( )是错误的。A.A.静态成员可分为静态数据成员和静态成员函数B.B.静态数据成员定义后必须在类体内进行初始化C.C.静态数据成员初始化不使用其构造函数D.D.静态数据成员函数中不能直接引用非静态成员静态成员可分为静态数据成员和静态成员函数; 静态数据成员被定义后,必须对它进行初始化,初始化在类体外进行,一般放在该类的实现部分最合适,也可以放在其 他位置,例如,放在主函数前面等; 静态数据成员初始化与该类的构造函数和析构函数 无关;在静态成员函数的实现中,可以直接引用静态成员,但不能直接引用非静态成员。例题7:关于友元的描
4、述中,( )是错误的。A.A .友元函数是成员函数,它被说明在类体内B.友元函数可直接访问类中的私有成员C.友元函数破坏封装性,使用时尽量少用D.友元类中的所有成员函数都是友元函数友元函数是非成员函数,在类体内说明了,在类体外定义,定义和调用等同于一 般的普通函数;由于它可以直接访问类的私有成员,因此破坏了类的封装性和隐藏性, 尽量少用。例题8设有如下程序结构:class Box;void mai n()Box A,B,C; 该程序运行时调用 次构造函数;调用 次析构函数。(1)3 (2)3每创建一个对象自动调用一次构造函数,在这里创建了 A、B、C三个对象,所以共调用了三次构造函数;每释放一
5、个对象,系统自动调用一次析构函数, A、B、C对象释放时,分别调用析构函数,所以析构函数共调用了三次。例题9:设A为test类的对象且赋有初值,则语句test B(A);表示 。将对象 A复制给对象B。执行test B(A);语句相当于调用了默认复制构造函数, 将A对象的属性复制给 B对象。例题10:利用“对象名成员变量”形式访问的对象成员仅限于被声明为 的成员;若要访问其他成员变量,需要通过 函数或 函数。(public (2)成员函数 (3)友元函数类体内的数据成员可声明为公有的、私有的和保护的, 公有的数据成员可利用“对象名.成员变量”形式来进行访问;私有的数据成员能被类中的其他成员函数
6、或友元函数所调 用;保护的数据成员可以在类体中使用, 也可以在派生类中使用, 但不能在其他类外通过对象使用。例题11:分析找出以下程序中的错误,说明错误原因,给出修改方案使之能正确运行。#in cludeclass oneprivate: int a1,a2;public: one(int x1=0, x2=0);void main()one data(2,3);coutdata.a1endl; coutdata.a2 分析: 出错原因:构造函数参数表语法错;构造函数没有函数体; 的私有成员变量。改正后的程序如下: #include class one int a1, a2;one(int x
7、1=0, int x2=0) a1=x1;a2=x2;int geta1() return a1;int geta2() return a2; void main() one data(2,3);data.geta1()data.geta2()例题 12:分析以下程序的错误原因,给出修改方案使之能正确运行。#include gain()成员函数在类体外定义格式是:函数返回类型 类名: 函数调用格式是:对象名 .成员函数名(参数表) 。 改正后的程序如下:class Amplifier float invol,outvol;float Amplifier:gain() return outvol
8、/invol; void main()amp.gain()类的对象不能直接访问类成员函数名(参数表) ;成员例题13:下列程序的运行结果是 。#i nclude class point int x,y;poin t(i nt a,i nt b)x=a;y=b;calli ng the con structor function .e ndl;poin t(po int &p);friend point move(po int q);po in t()coutcalli ng the destructor function .n; int getx() return x;int gety() r
9、eturn y;poin t:po in t(po int &p)x=p.x; y=p.y;calling the copy_initialization constructor function.n -point move(po int q) coutOK!nint i,j;i=q.x+10;j=q.y+20;point r(i,j);return r; point m(15,40),p(0,0);point n( m); p=move (n);p=p.getx(),p.gety()根据构造函数、拷贝构造函数和友元函数的特点,执行该程序后,输出结果是:call ing the con str
10、uctor function.calling the copy_initialization constructor function.OKcalling the destructor function.P=25,60calling the destructor function. calling the destructor function.说明:(1) 构造函数执行三次,分别初始化主函数中的对象 m, p和move函数中的对象r。(2) 拷贝构造函数共执行了三次。第一次,初始化对象 n;第二次在调用函数 move()时, 实参n给形参q进行初始化;第三次是执行函数 move的return r;语句时,系统用r初始化 一个匿名对象时使用了拷贝构造函数。(3) 析构函数执行了六次。在退出函数 move时释放对象r和q共调用二次;返回主函数 后,匿名对象赋值给对象 p 后,释放匿名对象又调用一次析构函数; 最后退出整个程序时释 放对象 m, n 和 p 调用三次。例题 14:定义一个学生类,其中有 3 个数据成员:学号、姓名、年龄,以及若干成员函数。 同时编写 main 函数使用这个类,实现对学生数据的赋值和输出。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1