C++中一个抽象类派编译意想不到文件结束的问题

c123sdn123 2012-12-06 05:41:27
原题:编写程序,计算圆柱体、球体、正方体和长方体的表面积和体积。
提示:可先设计一抽象类,其中包含个数据成员与分布求表面积和体积的纯虚函数,然后在此类基础上派生出圆柱体类、球体类、正方体类和长方体类,并分别实现抽象类中的两个纯虚函数。在main函数中利用基类的指针派生类的对像,从而实现运行时的多态性。
写的代码如下:
#include "stdafx.h"
#include <iostream>
using namespace std;
class Shape //定义抽象类Shape
{
protected:
double x,y,z;
public:
void set(double i=0,double j=0,double k=0)
{
x=i;
y=j;
z=k;
}
virtual void area()=0; //声明纯虚函数area,用于求各种图形的表面积
virtual void volume()=0; //声明纯虚函数volume,用于求各种图形的体积
};
class Cylinder: public Shape //定义圆柱体类Cylinder
{
public:
void area() //定义纯虚函数area
{
cout<<"圆柱体的表面积是:"<<3.14*x*x*(2+z)<<endl;
}
void volume()
{
cout<<"圆柱体的体积是:"<<3.14*x*x*z<<endl;
}
};
class Globe: public Shape //定义球体类Globe
{
public:
void area() //定义纯虚函数area
{
cout<<"球体的表面积是:"<<4*3.14*x*x<<endl;
}
void volume()
{
cout<<"球体的体积的:"<<4/3*3.14*x*x*x<<endl;
}
};
class Cube: public Shape //定义正方体类Cube
{
public:
void area() //定义纯虚函数area
{
cout<<"正方体的表面积是:"<<6*x*x<<endl;
}
void volume()
{
cout<<"正方体的体积是:"<<x*x*x<<endl;
};
class Cuboid: public Shape //定义长方体类Cuboid
{
public:
void area() //定义纯虚函数area
{
cout<<"长方体的表面积的:"<<2*(x*y+x*z+y*z)<<endl;
}
void volume()
{
cout<<"长方体的体积是:"<<x*y*z<<endl;
}
};


int main(int argc, char* argv[])
{
Shape *p; //定义指向抽象类的指针
Cylinder c;
Globe g;
Cube u;
Cuboid b;
p=&c; //抽象类的指针指向派生类对象
p->set(5,10);
p->area();
p->volume();
p=&g; //抽象类的指针指向派生类对象
p->set(5);
p->area();
p->volume();
p=&u; //抽象类的指针指向派生类对象
p->set(5);
p->area();
p->volume();
p=&b; //抽象类的指针指向派生类对象
p->set(5,10,15);
p->area();
p->volume();
return 0;
}

这是我仿照书上的例子,写的有许多不足之处:意想不到文件结束。求指导,谢谢。若有更好的代码,最好能写下来参考,我感激不尽。O(∩_∩)O
...全文
127 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
c123sdn123 2012-12-06
  • 打赏
  • 举报
回复
是的,少了个大括号没看到,谢谢
dhdahai 2012-12-06
  • 打赏
  • 举报
回复

#include "stdafx.h"
#include <iostream>
using namespace std;
class Shape     //定义抽象类Shape
{
protected:
	double x,y,z;
public:
	void set(double i=0,double j=0,double k=0)
	{
		x=i;
		y=j;
		z=k;
	}
	virtual void area()=0;    //声明纯虚函数area,用于求各种图形的表面积
	virtual void volume()=0;  //声明纯虚函数volume,用于求各种图形的体积
};
class Cylinder: public Shape  //定义圆柱体类Cylinder
{
public:
	void area()               //定义纯虚函数area
	{
		cout<<"圆柱体的表面积是:"<<3.14*x*x*(2+z)<<endl;
	}
	void volume()
	{
		cout<<"圆柱体的体积是:"<<3.14*x*x*z<<endl;
	}
};
class Globe: public Shape    //定义球体类Globe
{
public:
	void area()              //定义纯虚函数area
	{            
		cout<<"球体的表面积是:"<<4*3.14*x*x<<endl;
	}
	void volume()
	{
		cout<<"球体的体积的:"<<4/3*3.14*x*x*x<<endl;
	}
};//少了个大括号
class Cube: public Shape     //定义正方体类Cube
{
public:
	void area()              //定义纯虚函数area
	{
		cout<<"正方体的表面积是:"<<6*x*x<<endl;
	}
	void volume()
	{
		cout<<"正方体的体积是:"<<x*x*x<<endl;
	}
};
	class Cuboid: public Shape       //定义长方体类Cuboid
	{
	public:
		void area()                 //定义纯虚函数area
		{
			cout<<"长方体的表面积的:"<<2*(x*y+x*z+y*z)<<endl;
		}
		void volume()
		{
			cout<<"长方体的体积是:"<<x*y*z<<endl;
		}
	};


	int main(int argc, char* argv[])
	{
		Shape *p;            //定义指向抽象类的指针
		Cylinder c;
		Globe g;
		Cube u;
		Cuboid b;
		p=&c;               //抽象类的指针指向派生类对象
		p->set(5,10);
		p->area();
		p->volume();
		p=&g;               //抽象类的指针指向派生类对象
		p->set(5);
		p->area();
		p->volume();
		p=&u;               //抽象类的指针指向派生类对象
		p->set(5);
		p->area();
		p->volume();
		p=&b;                //抽象类的指针指向派生类对象
		p->set(5,10,15);
		p->area();
		p->volume();
		return 0;
	}

64,692

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧