龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

C++习题与解析(类和对象-07)

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
题12. 分析以下程序的执行结果 #include class Sample { public: int x; int y; void disp() { cout } }; void main() { int Sample::*pc; Sample s,*p= pc= p->*pc=10; pc= p->*pc=20; p->disp(); } 解: 本题说明了类数据成员指针的

  

题12. 分析以下程序的执行结果

  

#include

  

class Sample

  

{

  

public:

  

int x;

  

int y;

  

void disp()

  

{

  

cout<<"x="<

  

}

  

};

  

  

void main()

  

{

  

int Sample::*pc;

  

Sample s,*p=&s;

  

pc=&Sample::x;

  

p->*pc=10;

  

pc=&Sample::y;

  

p->*pc=20;

  

p->disp();

  

}

  

  

解:

  

本题说明了类数据成员指针的使用方法。这里通过指向对象的指针来给类数据成员赋值,其原理与上题相似。输出为:

  

x=10,y=20

  

------------------------------------------------------

题13.分析以下程序的执行结果

  

#include

  

class Sample

  

{

  

int x;

  

int y;

  

public:

  

Sample(int a,int b)

  

{

  

x=a;y=b;

  

}

  

int getx(){return x;}

  

int gety(){return y;}

  

};

  

  

void main()

  

{

  

int (Sample::*fp)();

  

fp=&Sample::getx;

  

Sample s(2,7);

  

int v=(s.*fp)();

  

fp=&Sample::gety;

  

int t=(s.*fp)();

  

cout<<"v="<

  

}

  

  

解:

  

本题说明了类成员函数指针的使用方法。在main()中定义的fp是一个指向Sample类成员函数的指针。执行fp=Sample::getx后。fp指向成员函数getx(),int v=(s.*fp)()语句等价于int v.getx(),v=x=2;执行fp=Sample::gety之后,fp指向成员函数gety(),int t=(s.*fp)()语句等价于int t=s.gety(),t=x=7。所以输出为:

  

v=2,t=7

  

  

------------------------------------------------------

  

  

题14 .分析以下程序的执行结果

  

#include

  

class Sample

  

{

  

int x;

  

int y;

  

public:

  

Sample(int a,int b)

  

{

  

x=a;y=b;

  

}

  

int getx(){return x;}

  

int gety(){return y;}

  

};

  

  

void main()

  

{

  

int (Sample::*fp)();

  

fp=&Sample::getx;

  

Sample s(2,7),*p=&s;

  

int v=(p->*fp)();

  

fp=&Sample::gety;

  

int t=(p->*fp)();

  

cout<<"v="<

  

}

  

  

解:

  

本题说明了类成员函数指针的使用方法。这里通过指向对象的指针来调用指向类成员函数的指针,其原理与上题相似。输出仍为:

  

v=2,t=7

  

  

-----------------------------------------------------

  

  

题15.设计一个立方体类Box,它能计算并输出立方体的体积和表面积。

  

  

解:

  

Box类包含三个私有数据成员a(立方体边长)、volume(体积)和area(表面积),另有两个构造函数以及seta()(设置立方体边长)、getvolume()(计算体积)、getarea()(计算表面积)和disp()(输出结果)。

  

本题程序如下:

  

#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();

  

}

  

  

本程序的执行结果如下:

  

obj1=>体积:91.125, 表面积:121.5

  

obj2=>体积:262.144,表面积:245.76

  

  

精彩图集

赞助商链接