有关空虚函数和纯虚函数

greenteanet 2005-01-05 10:07:14
在下面这个类中
class Shape
{
public:
virtual float GetArea()=0;//纯虚函数
virtual float GetPerim()=0;//纯虚函数
};
能否把其中的纯虚函数换成空虚函数
也就是如下
class Shape
{
public:
virtual float GetArea
{}//空虚函数
virtual float GetPerim
{}//空虚函数
};
请在回答时说明理由.谢谢
...全文
346 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
MeHawk 2005-01-05
  • 打赏
  • 举报
回复
含有纯虚函数的类 称为抽象数据类型,作用是定义一个接口,只能做为基类,这样的类不能创建对象(实例化)。
而空的虚函数和有代码的虚函数本质上没有区别的,你 确实定义了这个函数,只不过函数里面什么都没干而已。所以两种写法的作用不同,不过替换一下也没什么大不了的,最好不过编译出来的东西多了几行无伤大雅的代码而已。
playmud 2005-01-05
  • 打赏
  • 举报
回复
可以,那就是一个接口.
healer_kx 2005-01-05
  • 打赏
  • 举报
回复
这是需要自己的设计理念的,改了不好。

抽象类就是抽象类。

实现就是实现,

而且抽象类可以提醒你哪里没有实现。。。
greenteanet 2005-01-05
  • 打赏
  • 举报
回复
在下面这个类中
class Shape
{
public:
virtual float GetArea()=0;//纯虚函数
virtual float GetPerim()=0;//纯虚函数
};
能否把其中的纯虚函数换成空虚函数
也就是如下
class Shape
{
public:
virtual float GetArea
{}//空虚函数
virtual float GetPerim
{}//空虚函数
};
说明一下:在这个程序中不用实例化那个Shape.
请在回答时说明理由.谢谢
sharkhuang 2005-01-05
  • 打赏
  • 举报
回复
空的可以实例话
纯的不能
asddfg 2005-01-05
  • 打赏
  • 举报
回复
纯虚函数 要在继承类中实现的了!
july81 2005-01-05
  • 打赏
  • 举报
回复
这个没什么大冲突吧,纯虚函数也可以定义为空啊!
greenteanet 2005-01-05
  • 打赏
  • 举报
回复
说明一下:在这个程序中不用实例化那个Shape..这样子呢??
xiyi168 2005-01-05
  • 打赏
  • 举报
回复
包含纯虚函数的类就是 接口,
它是不能实例化的,但是可以用它的指针
beyondtkl 2005-01-05
  • 打赏
  • 举报
回复
yes. 按照純語法來說 當然事可以改得...
抽象類有一個比較特點 就是不能實例化。。

樓上已經說了。。看你具體得需求,設計了。。
其實就是一個抽象層次之類得。。
gateh 2005-01-05
  • 打赏
  • 举报
回复
这要根据你的应用要求来改吧. 如果该类设计时, 要求不能被实例化, 必须要求
子类重载实现getarea和getperim, 那么, 就不能改为"空"函数. 否则, 是可以改为
空函数的. 虚函数的应用, 是有其具体的意义的. 能改与否,并不取决于语言本身,
而取决于应用需求.
greenteanet 2005-01-05
  • 打赏
  • 举报
回复
感谢上面的各位,这样子做的话,在安全角度是不够的,因为当你改变了它的纯虚函数的话,就可以进行实例化啦,但是题目上的那个是不能进行转化的,理由就是那个空虚函数有一个返回值.所以就不能将纯虚函数转化为空虚函数啦.
somedummy 2005-01-05
  • 打赏
  • 举报
回复
就是不明白这样做有什么意义,从语法上来考虑的话肯定是没有问题的,但是从设计的角度上来考虑的话就有某些问题了。如果确定这个类不会有对应的实例,也不考虑一不小心创建了这样一个实例,那么两个没有问题,用哪种都一样。但是出于语义的安全角度,用纯虚函数更加合适
melonliu 2005-01-05
  • 打赏
  • 举报
回复
来晚了……
cxjddd 2005-01-05
  • 打赏
  • 举报
回复
可以!!!
dudu妈 2005-01-05
  • 打赏
  • 举报
回复
我觉得一般是可以的。
声明为纯虚函数之后,基类中就不再给出函数的实现部分。纯虚函数的函数体由派生类给出。空的虚函数是指函数体为空得虚函数。纯虚函数根本没有函数体,而空的虚函数的函数体为空的。他们共同的特点是都可以派生出新的类。然后在新类中给出新的虚函数的实现,而且这种新的实现可以句有多态特征。
goodluckyxl 2005-01-05
  • 打赏
  • 举报
回复
不行不行

没有理由

































抽象类定义为了不让其被实例化 认为实例无意义
playmud 2005-01-05
  • 打赏
  • 举报
回复
少了()
北极猩猩 2005-01-05
  • 打赏
  • 举报
回复
纯虚函数的作用在于提供抽象操作的接口,因为对于你的Shape类来说GetArea这类的函数是没有实现的,而给一个空的虚函数意味着这个类可以实例化,这个方法可以使用而只是不执行任何方法,这显然是不合语义的。
greenteanet 2005-01-05
  • 打赏
  • 举报
回复
在下面这个类中
class Shape
{
public:
virtual float GetArea()=0;//纯虚函数
virtual float GetPerim()=0;//纯虚函数
};
能否把其中的纯虚函数换成空虚函数
也就是如下
class Shape
{
public:
virtual float GetArea()
{}//空虚函数
virtual float GetPerim()
{}//空虚函数
};
请在回答时说明理由.谢谢
加载更多回复(5)

64,651

社区成员

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

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