纯虚类编程中的问题

dinghing 2010-05-14 02:15:04
#include<iostream>
using namespace std;
class Shape
{
public:
virtual void area() const;
virtual void volume() const;
virtual void print ()=0;
virtual void printShapeName() const=0;
};
class TwoDimensionalShape:public Shape
{
public:
virtual void area()const;
virtual void printShapeName()const=0;
};
class Circle:public TwoDimensionalShape
{
public:
Circle(float=0.0,float=0.0,float=0.0);
void setPoint(float,float);
float getX() const{return x;}
float getY() const{return y;}
void setRadius(float);
float getRadius() const;
virtual void area() const;
virtual void print()const{cout<<"is TwoDimensionalShape";}
virtual void printShapeName() const{cout<<"Circle:";}
private:
float x,y;
float radius;
};
Circle::Circle(float r,float a,float b)
{
radius=r;
x=a;
y=b;
}
void Circle::setPoint(float a,float b)
{
x=a;
y=b;
}
void Circle::setRadius(float r)
{
radius=r;
}
float Circle::getRadius() const{return radius;}
void Circle::area() const{cout<<"S="<<3.14159*radius*radius<<endl;}
void main()
{
Circle circle(1.2,2,3);
circle.area();
}
为什么一直报
error C2259: 'Circle' : cannot instantiate abstract class due to following members:
谢谢啊。。。。
疯了。。
...全文
96 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wesleyluo 2010-05-14
  • 打赏
  • 举报
回复
是只要有 虚函数的类 都视为抽象类,不能创建一个实例?
cattycat 2010-05-14
  • 打赏
  • 举报
回复
virtual void print ()const=0;
加个const吧,Circle和父类的函数类型不一样。
cattycat 2010-05-14
  • 打赏
  • 举报
回复
area和volumn虚函数没有实现,Circle仍然会被视为抽象类。
冻结 2010-05-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 freezezdj 的回复:]
在你的Circle类中把
virtual void volume() const;
也重载了,不然你的Circle也是一个抽象类。
[/Quote]

作废!
冻结 2010-05-14
  • 打赏
  • 举报
回复
class Shape
{
public:
virtual void area() const;
virtual void volume() const;
virtual void print () const = 0;
virtual void printShapeName() const = 0;
};

非const 不可重载 const 函数。
pengzhixi 2010-05-14
  • 打赏
  • 举报
回复
搞这么多抽象类,你很多函数都未在最后的那个类里面实现的。还有些函数你没有加const进行修饰。
pengzhixi 2010-05-14
  • 打赏
  • 举报
回复

#include<iostream>
using namespace std;
class Shape
{
public:
virtual void area() const{}
virtual void volume() const{}
virtual void print ()const=0;
virtual void printShapeName() const=0;
};
class TwoDimensionalShape:public Shape
{
public:
virtual void area()const{}
virtual void printShapeName()const=0;
};
class Circle:public TwoDimensionalShape
{
public:
Circle(float=0.0,float=0.0,float=0.0);
void setPoint(float,float);
float getX() const{return x;}
float getY() const{return y;}
void setRadius(float);
float getRadius() const;
virtual void area() const;
virtual void print()const{cout<<"is TwoDimensionalShape";}
virtual void printShapeName() const{cout<<"Circle:";}
private:
float x,y;
float radius;
};
Circle::Circle(float r,float a,float b)
{
radius=r;
x=a;
y=b;
}
void Circle::setPoint(float a,float b)
{
x=a;
y=b;
}
void Circle::setRadius(float r)
{
radius=r;
}
float Circle::getRadius() const{return radius;}
void Circle::area() const{cout<<"S="<<3.14159*radius*radius<<endl;}
int main()
{
Circle circle(1.2,2,3);
circle.area();
system("pause");
return 0;
}
冻结 2010-05-14
  • 打赏
  • 举报
回复
在你的Circle类中把
virtual void volume() const;
也重载了,不然你的Circle也是一个抽象类。

64,649

社区成员

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

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