C++習題與解析(類和對象-07)
2019-11-17 05:44:19
供稿:網友
題12. 分析以下程序的執行結果
#include<iostream.h>
class Sample
{
public:
int x;
int y;
void disp()
{
cout<<"x="<<x<<",y="<<y<<endl;
}
};
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<iostream.h>
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="<<v<<",t="<<t<<endl;
}
解:
本題說明了類成員函數指針的使用方法。在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<iostream.h>
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<<",t="<<t<<endl;
}
解:
本題說明了類成員函數指針的使用方法。這里通過指向對象的指針來調用指向類成員函數的指針,其原理與上題相似。輸出仍為:
v=2,t=7
-----------------------------------------------------
題15.設計一個立方體類Box,它能計算并輸出立方體的體積和表面積。
解:
Box類包含三個私有數據成員a(立方體邊長)、volume(體積)和area(表面積),另有兩個構造函數以及seta()(設置立方體邊長)、getvolume()(計算體積)、getarea()(計算表面積)和disp()(輸出結果)。
本題程序如下:
#include<iostream.h>
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<<"體積:"<<volume<<",表面積:"<<area<<endl;
}
};
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