C++习题与解析(类和对象-07)
题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
- 上一篇:C++习题与解析(类和对象-06)
- 下一篇:C++习题与解析(类和对象-02)