社区
C++ 语言
帖子详情
有关空虚函数和纯虚函数
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
打赏
收藏
有关空虚函数和纯虚函数
在下面这个类中 class Shape { public: virtual float GetArea()=0;//纯虚函数 virtual float GetPerim()=0;//纯虚函数 }; 能否把其中的纯虚函数换成空虚函数 也就是如下 class Shape { public: virtual float GetArea {}//空虚函数 virtual float GetPerim {}//空虚函数 }; 请在回答时说明理由.谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
空的虚
函数
与
纯虚
函数
的区别
所以问“虚
函数
是写成
纯虚
函数
好还是写成虚的空
函数
好”本身就是不合逻辑的,他们当然各有各的适宜场景
纯虚
函数
适用于两种情况 a) 接口类情况,在接口类情况下,不允许类内部包含任何实现,常见的是在DLL中...
C++虚
函数
和
纯虚
函数
的异同
虚
函数
又称为虚方法,虚方法是父类的一个组成部分,但是可以被不同的子类重写。虚
函数
的关键字是virtual,如下所...在虚
函数
中有一个特殊的虚
函数
,称为
纯虚
函数
: class Base { public: virtual void putout() = 0;
纯虚
函数
和虚
函数
的区别
首先:强调一个概念 ...定义
纯虚
函数
是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个
函数
。简介假设我们有下面的类层次:class A { public: virtual void foo() {
纯虚
函数
和虚
函数
的联系
1、
纯虚
函数
的声明除过像虚
函数
加关键字virtual而外,还必须加 = 0; 2、声明为虚
函数
,为了能让这个
函数
在它的派生类里面被覆盖(或隐藏),这样编译器就可以通过后期绑定达到多态性。 3、声明为
纯虚
函数
,有一种...
mfc
纯虚
函数
和抽象类
纯虚
函数
抽像类 一、
纯虚
函数
虚
函数
为了重载和多态的需要,有时需要在基类...
纯虚
函数
与
空虚
函数
是有区别的; 二、抽像类 包含
纯虚
函数
的类被称为抽像类。也叫虚基类,这种类不能直接生成对象,而只有...
C++ 语言
64,651
社区成员
250,488
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章