读书人

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

发布时间: 2012-12-26 14:39:28 作者: rapoo

C++中一个抽象类派编译意想不到文件结束的问题
原题:编写程序,计算圆柱体、球体、正方体和长方体的表面积和体积。
提示:可先设计一抽象类,其中包含个数据成员与分布求表面积和体积的纯虚函数,然后在此类基础上派生出圆柱体类、球体类、正方体类和长方体类,并分别实现抽象类中的两个纯虚函数。在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
[最优解释]


#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;
}


[其他解释]
是的,少了个大括号没看到,谢谢

读书人网 >C++

热点推荐