社区
C++ 语言
帖子详情
谭浩强c++书上的一个错误,关于纯虚函数的
WuYL7812
2010-03-31 06:08:52
12.4
纯虚函数与抽象类
12.4.1
纯虚函数
这个章节里有下面描述,标为红色部分是错误的,大家发现了没有
注意:
①纯虚函数没有函数体
;
②最后面的“=0”并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是纯虚函数”;
③这是一个声明语句,最后应有分号。
纯虚函数只有函数的名字而不具备函数的功能,不能被调用。
...全文
238
17
打赏
收藏
谭浩强c++书上的一个错误,关于纯虚函数的
12.4 纯虚函数与抽象类 12.4.1 纯虚函数 这个章节里有下面描述,标为红色部分是错误的,大家发现了没有 注意: ①纯虚函数没有函数体; ②最后面的“=0”并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是纯虚函数”; ③这是一个声明语句,最后应有分号。 纯虚函数只有函数的名字而不具备函数的功能,不能被调用。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
WuYL7812
2010-04-01
打赏
举报
回复
虚函数为什么我知道,但是这个地方他说的的却错了。
[Quote=引用 15 楼 sunm42000 的回复:]
虚函数是为了什么 lz搞明白这就行了
中文本来就是翻译过来的意会就可以 书中无非是强调在继承类中给予定义这点
英文够好可以看原本书籍 自己体会意思
[/Quote]
sunm42000
2010-03-31
打赏
举报
回复
实在不行lz可以直接看bjarne的c++程序设计语言这本书
sunm42000
2010-03-31
打赏
举报
回复
虚函数是为了什么 lz搞明白这就行了
中文本来就是翻译过来的意会就可以 书中无非是强调在继承类中给予定义这点
英文够好可以看原本书籍 自己体会意思
WuYL7812
2010-03-31
打赏
举报
回复
我看过国内几本C++的书,都写纯虚函数不能有函数体,明显错误了,实际上C++标准上没有规定纯虚函数不能有函数体
WuYL7812
2010-03-31
打赏
举报
回复
确实纯虚函数很少有定义,实际上是没必要有定义,表达成 纯虚函数没有函数体 是应该是错误的
我看过一本有名的书,书名我忘了,好像是essential c++,说有时候要用到这个技巧,就是应该定义纯虚函数
本来这个函数应该是普通虚函数的,通常可以被各个派生类使用,但是也有个别地方,必须自己定义,否则会有严重后果。但是程序员经常让编译器检查程序对还是错,普通虚函数有定义,编译不会出错
这是可以把这个函数定义成纯虚函数,这样没有定义就会编译出错,如果需要这个定义,只要用 :: 指定调用就可以了
jackyjkchen
2010-03-31
打赏
举报
回复
[Quote=引用 9 楼 dubiousway 的回复:]
纯虚函数定义函数体,其最大的作用是什么?(只是问问,我一直没搞明一个接口要定义干吗?有什么便利的地方吗)
[/Quote]
定义一个空类,又想这个空类作为虚基类的时候……这时候没地方定义虚函数,只能拿析构函数开刀……
WuYL7812
2010-03-31
打赏
举报
回复
虚函数当然可以是纯虚的,这个是语法问题,就是不让这个类被实例化。
实际上任意纯虚函数都可以有函数体,只要你愿意,而且可以被调用到。这个你可以那任意编译器试
[Quote=引用 9 楼 dubiousway 的回复:]
纯虚函数定义函数体,其最大的作用是什么?(只是问问,我一直没搞明一个接口要定义干吗?有什么便利的地方吗)
[/Quote]
WuYL7812
2010-03-31
打赏
举报
回复
是你理解有问题吧,我说过给 virtual ~base() = 0 加个定义,链接就能通过,结果也可以被调用
这个跟他书上说的有矛盾,但是我这个是编译器做出的判断。
在派生类中没法定义基类的析构函数,只能在基类中定义,即使这个函数是纯虚函数
[Quote=引用 6 楼 jackyjkchen 的回复:]
引用 2 楼 wuyl7812 的回复:
class base
{
public:
virtual ~base() = 0;
};
class derived : public base
{
public:
~dervied(){}
}
derived dd;
int main()
{
return 0;
}
编译不通过
我感觉这是你理解的……
[/Quote]
dubiousway
2010-03-31
打赏
举报
回复
纯虚函数定义函数体,其最大的作用是什么?(只是问问,我一直没搞明一个接口要定义干吗?有什么便利的地方吗)
jackyjkchen
2010-03-31
打赏
举报
回复
我看错了,原来是纯虚析构函数,这时候是要提供一个定义体
xiuxianshen
2010-03-31
打赏
举报
回复
貌似3楼发过,去问3楼要
jackyjkchen
2010-03-31
打赏
举报
回复
[Quote=引用 2 楼 wuyl7812 的回复:]
class base
{
public:
virtual ~base() = 0;
};
class derived : public base
{
public:
~dervied(){}
}
derived dd;
int main()
{
return 0;
}
编译不通过
[/Quote]
我感觉这是你理解的问题啊,你继承中没有实例化纯虚函数当然不行了。
虚函数本身是不能实例化的(不能定义实现),但是用时必须在子类实现后用
WuYL7812
2010-03-31
打赏
举报
回复
哪里有这个勘误表,我要看完谭浩强这本书,要找出其错误,考验一下我的c++概念
WuYL7812
2010-03-31
打赏
举报
回复
~base()是必须要定义的,因为这个是必然要调用到的,给~base()加个定义就编译通过了
实际上是纯虚函数一般都没必要有定义,但是你要是给纯虚函数写的定义,编译器也不会报错,而且可以调用到,用过 :: 运算符指定要调用基类的函数
jackyjkchen
2010-03-31
打赏
举报
回复
谭浩强里的书许多地方用词不规范
①纯虚函数没有函数体;
的意思应该是是说纯虚函数没有定义实现。
实际上,这正原则性的“正反”错误倒真不很多,网上流传的那份给谭浩强的勘误表,抠字眼的本事倒是一流,看完以后我没有鄙视谭浩强,倒鄙视那篇文章的作者
WuYL7812
2010-03-31
打赏
举报
回复
class base
{
public:
virtual ~base() = 0;
};
class derived : public base
{
public:
~dervied(){}
}
derived dd;
int main()
{
return 0;
}
编译不通过
SiGoYi
2010-03-31
打赏
举报
回复
LZ连他的书还看啊!我上学时让他误了我的学生时代。
谭浩强
c++
程序设计复习笔记(全章节)
c++
期末复习
谭浩强
C++
笔记(11-12章)
谭浩强
C++
笔记(11-12章) 第十一章 继承和派生类 抽象类与保护的成员函数:抽象类只能用作被继承,不能定义对象。含有
纯虚函数
和构造函数或析构函数不为public的类为抽象类。 当把类中的构造函数或析构函数说明...
《
谭浩强
C++
程序设计》——
C++
笔记
C++
语言基础:1.
C++
11增加了long long 类型,表示最小尺寸为64的整数。2. 浮点数运算使用double,通常运算速度更快。3. 超过int容量时使用long long类型,无符号数使用unsigned。4. 切勿混用带符号类型和无符号类型...
《
c++
程序设计--
谭浩强
》读书笔记
第一章
C++
初步认识
C++
对C的“增强”,表现在两个方面: (1)在原来面向过程的机制基础上,对C语言的功能做了不少扩展 (2)增加了面向对象的机制 面向对象和面向过程不是矛盾的,而是各有用途、互为补充,...
C++
程序设计(
谭浩强
)教材例题程序
C++
程序设计题解与上机指导 教材例题程序 第一章 Ch1-1 #include using namespace std; int main() { cout<<"This is a
C++
program."; return 0; } Ch1-2 #include using namespace std; int main() { int ...
C++ 语言
64,636
社区成员
250,540
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章