/*
*All rights reserved.
*文件名称:main.cpp
*作 者:姜 甜 甜
*完成日期:2015年6月1日
*版 本 号:v1.0
*问题描述:设计一个抽象类CSolid,含有用于求表面积及体积的两个纯虚函数。设计派生类CCube、CBall、CCylinder,分别表示正方体、球体及圆柱体。在main()函数中,定义CSolid *p;(p是指向基类的指针,且这个基类是个抽象类)。要求利用这个p指针,能够求出正方体、球体及圆柱体对象的表面积及体积。
*/
#include<iostream>
using namespace std;
class CSolid
{
public:
virtual void s()const=0;
virtual void v()const=0;
};
class Cube:public CSolid
{
public:
Cube(double a):r(a){}
virtual void s()const
{
cout<<"s:"<<6*r*r<<endl;
}
virtual void v()const
{
cout<<"v:"<<r*r*r<<endl;
}
protected:
double r;
};
class Ball:public CSolid
{
public:
Ball(double a):r(a){}
virtual void s()const
{
cout<<"s:"<<4*3.1415*r*r<<endl;
}
virtual void v()const
{
cout<<"v:"<<4/3*3.1415*r*r*r<<endl;
}
protected:
double r;
};
class Cylinder:public CSolid
{
public:
Cylinder(double a,double b):r(a),h(b){}
virtual void s()const
{
cout<<"s:"<<2*3.1415*r*r+2*3.1415*r*h<<endl;;
}
virtual void v()const
{
cout<<"v:"<<3.1415*r*r*h<<endl;
}
protected:
double r,h;
};
int main()
{
CSolid *p;
Cube a(2);
Ball b(2);
Cylinder c(2,4);
p=&a;
p->s();
p->v();
p=&b;
p->s();
p->v();
p=&c;
p->s();
p->v();
return 0;
}
笔会:虚函数。指向p->b.不能写p.b 会出现:
\桌面\12\main.cpp|62|error: request for member 'v' in 'p', which is of pointer type 'CSolid*' (maybe you meant to use '->' ?)|