纯虚函数为什么要赋值为零

[复制链接]
查看11 | 回复6 | 2021-1-27 07:17:20 | 显示全部楼层 |阅读模式
写了一个虚函数为什么要赋值为零?还有把getarea函数定义为常函数为什么编译不了?



分 -->
回复

使用道具 举报

千问 | 2021-1-27 07:17:20 | 显示全部楼层
这样就不用写函数实现部分了。
接口不能有实例,继承类必须实现这个函数。

回复

使用道具 举报

千问 | 2021-1-27 07:17:20 | 显示全部楼层
接口不能有实例是什么意思?
回复

使用道具 举报

千问 | 2021-1-27 07:17:20 | 显示全部楼层
1.首先,这个不叫“赋值为0”,这只是一种声明,或者标记的方式。如果你自己做编译器,你可以用“=1”“=2”甚至一个单词或者一个汉字来表示;
2.其次,这种标记方式,就意味着当前类是不能new出来的,不会在内存中有实际的对象存在,这相当于C#,JAVA等语言中的接口(Interface);
3.最后,继承了此类的子类,若要new一个对象出来,则必须要将此方法实现,若没有实现,则不能实例化。
打个比方,我们定义了一个东西,叫“飞”。但是,“飞”这个动作,本身是无法实例化的,它必须要依赖一个具体的东西才能实例化(比如,鸟,飞机,飞船等等);
接下来,我们定义了飞机,则需要实现"飞"这个接口,不能飞的飞机,那是飞机吗?
回复

使用道具 举报

千问 | 2021-1-27 07:17:20 | 显示全部楼层
引用2楼weixin_45223157的回复:接口不能有实例是什么意思?
有纯虚函数的类,叫做抽象类。
这里有说明:
https://www.cnblogs.com/weizhixiang/articles/5762294.html
比如植物,动物,细菌,都是抽象名词。
有很多性质不能确定,比如动物的运动功能(函数),不确定具体的动物类型,运动功能(函数)是很有具体难定义的。

回复

使用道具 举报

千问 | 2021-1-27 07:17:20 | 显示全部楼层
引用3楼super_admi的回复:1.首先,这个不叫“赋值为0”,这只是一种声明,或者标记的方式。如果你自己做编译器,你可以用“=1”“=2”甚至一个单词或者一个汉字来表示;
2.其次,这种标记方式,就意味着当前类是不能new出来的,不会在内存中有实际的对象存在,这相当于C#,JAVA等语言中的接口(Interface);
3.最后,继承了此类的子类,若要new一个对象出来,则必须要将此方法实现,若没有实现,则不能实例化。
打个比方,我们定义了一个东西,叫“飞”。但是,“飞”这个动作,本身是无法实例化的,它必须要依赖一个具体的东西才能实例化(比如,鸟,飞机,飞船等等);
接下来,我们定义了飞机,则需要实现"飞"这个接口,不能飞的飞机,那是飞机吗?

谢谢











回复

使用道具 举报

千问 | 2021-1-27 07:17:20 | 显示全部楼层
引用4楼zjq9931的回复:Quote: 引用2楼weixin_45223157的回复:
接口不能有实例是什么意思?

有纯虚函数的类,叫做抽象类。
这里有说明:
https://www.cnblogs.com/weizhixiang/articles/5762294.html
比如植物,动物,细菌,都是抽象名词。
有很多性质不能确定,比如动物的运动功能(函数),不确定具体的动物类型,运动功能(函数)是很有具体难定义的。

明白了谢谢








回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行