《C++ Primer》和《C++ Primer Plus》有哪些区别

当前位置: &&>> 阅读正文
View: 261,862
Author: Dong
- 359,967 阅 - 273,614 阅 - 261,862 阅 - 247,109 阅 - 245,229 阅 - 243,153 阅 - 223,097 阅 - 214,591 阅 - 211,833 阅 - 204,386 阅
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
c++ primer 这本书看完了,再看什么书提高自己?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
看 Effective 三部曲:
再之后,就把书扔一边,开始做项目吧。
话说真的把 C++ Primer 看完了么?如果是草草看完,上述三本书可不好啃呢。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
项目实践的重要性不必多说, 像是打怪升级, 但好的书籍就像武功秘籍.
多年不做C++了, 只能推荐以前的旧书了, 现在应该有新的内容出来了吧随着C++11的发布.
and maybe More Effective C++, 几本书重复的内容不少, 个人比较喜欢 C++ Coding Standard.
的第一章, 精华在第一章, 主要讨论以C++做接口时的问题, C++的二进制兼容性.
模板+设计模式+基于策略的设计. 关注于库的编写. Traits, MetaProgramming, Design Patterns
中文看得会比较累一点. 英文也会很吃力. 但这本是必须啃下去的C++书.
深入学习模板, 请看此书
参考书. 在了解STL的同时也可以了解一些数据结构的知识.
虽然名字叫C++程序语言设计, 但作者夹带了相当多的私货. 我个人着实受不了中文翻译版本里所用的术语.
Windows 下的话可以看看
关于设计, 关于单元测试, 关于重构, 关于如何对现有的C++项目进行单元测试与重构, 指明了一条通往测试驱动开发的道路.
设计原则的那一章是精华. 作者啰嗦加偏执.
第二部分关于设计原则的内容是精华. 书名叫敏捷, 但实际没有太多敏捷的内容. 设计模式的部分就当是调料吧.
前三章是精华, 小步前进是精华, 注意每改一处代码都要保证编译OK, 单元测试OK. 书最后的其它作者写的内容也非常值得一看.
代码大全, 中文版本翻译也很好. 云风的也可以一看
书有些老了, 但重要性不用多说. 初学者容易生搬硬套模式, 这也是一个进步过程吧.
如何写出更易懂的代码
以上内容很能帮你成为一个好的码农(而已).
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
里面的书很多,概括一下
1.入门:C++ Primer等
另外C++ Primer和C++ Primer Plus没关系,后者评价不如前者
2.实践: Effective C++, Effective STL
3.进阶:More Effective C++ 等
4.高级:Modern C++ Design 等
所以看完C++ Primer就是Effective C++了
不过讲真我觉得看完C++ Primer就可以开始写东西了,纸上得来终觉浅,只看书看不会,坑要自己跳了才能明白为什么它是坑
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
补充一下吧。上面提到的已经足够详细。
除了 Scott Meyers 的 effective 系列,还可以看一下《The C++ Standard Library》,配合《STL 源码剖析》,配合 STLPort 版本的 STL 源码,研究研究相关的实现。
操作系统相关。看看你是做 windows 还是 linux。如果是 linux,要看《UNIX 环境高级编程》。
网络相关。可以研究相关的网络通信库 ACE、muduo。陈硕老师的那本《Linux 多线程服务器端编程》值得一看。
看一些用C++写的优秀的源码,比如 MySQL、Apache。
如果做游戏的话,可以学习一下 cocos2dx,从使用到源码。
我也是在学习中,遇到很多坑,遇到很多困难,很多时候错过了机会才知道该多学学。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
不要去看c++的那些生僻技巧,比如:STL的实现,boost实现,modern c++, 模板类的都可以简单看看。
然后,建议看看 linux 或者 windows的经典编程书,结合项目。
多掌握以下算法和数据结构,然后再上升到架构。
另外, 有机会学两门高级语言,比如python,go 之类的,很多时候并不需要c++
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
应该就是做项目吧,只看书提高不了人,有本《nginx源码分析》 值得看
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
C++之父的C++程序设计语言,侯捷翻译的深入探索C++对象模型
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
不能光看书,要多动手实践。可以参与一些项目,或者做一些ACM的题。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
之前写过C++书单推荐,详见下面的地址;
当然,更多看看pongba等大佬们推荐的书单吧:
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
《STL源码分析》
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
Effective系列
Exceptional系列
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
难道不是C++ Primer Plus吗。。笑。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
《STL源码剖析》,看完这货,你应该对C++语法和泛型设计非常熟练了
《算法导论》,看完这货,你就不是一个只会调用库函数、拼凑程序的人了
《代码本色》,新出不久的书,几乎横扫各应用领域
当然自己平时没事多写写类库、项目啥的最好不过咯
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
Effective那些是必须要看的,还要看一本D&E,老爹写的
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
用C++写东西。
然后把 C++ primer 再看一遍。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
建议你去看一下c++招聘职位的要求,这样可能会对你决定怎样开拓技能树有帮助
同步到新浪微博
分享到微博?
你好!看起来你挺喜欢这个内容,但是你还没有注册帐号。 当你创建了帐号,我们能准确地追踪你关注的问题,在有新答案或内容的时候收到网页和邮件通知。还能直接向作者咨询更多细节。如果上面的内容有帮助,记得点赞 (????)? 表示感谢。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
扫扫下载 App《C++ Primer Plus》14.2 私有继承 学习笔记
来源:博客园
C++(除了成员变量之外)还有另一种实现has-a关系的途径——私有继承。 使用私有继承,基类的公有成员和保护成员都将成为派生类的私有成员。 (如果使用保护继承,基类的公有成员和保护成员都将称为派生类的保护成员。) 这意味着基类方法将不会称为派生类对象共有接口的一部分,但可以在派生类的成员函数中使用它们。 14.2.1 Student类示例(新版本) Student类应从两个类派生而来,因此声明将列出这两个类: class Student : private std::string, private std::valarray { public: ... }; 使用多个基类的继承被称为多重继承(multiple inheritance,MI)。 新的Student类不需要私有数据,因为两个基类已经提供了所需的所有数据成员。包含版本(14.1节中的)提供了两个被显式命名的对象成员,而私有继承提供了两个无名称的子对象成员。这是两个方法的第一个主要区别。 1.初始化基类组件 隐式地继承组件而不是成员对象将影响代码的编写,因为再也不能使用name和scores来描述对象了,而必须使用用于公有继承的技术。例如,对于构造函数,包含将使用这样的构造函数: Student(cosnt char * str, const double * pd, int n) : name(str), scored(pd, n) {}
// use object names for containment 对于继承类,新版本的构造函数将使用成员初始化列表语法,它使用类名而不是成员名来标识构造函数: Student(const char * str, const double * pd, int n) : std::string(str), ArrayDb(pd, n) {}
// use class names for inheritance 成员初始化列表使用std::string(str),而不是name(str)。这是包含和私有继承之间的第二个主要区别。 2.访问基类的方法 使用私有继承时,只能在派生类的方法中使用基类的方法。但有时候可能希望基类工具是公有的。例如,在类声明中提出可以使用average()函数。和包含一样,要实现这样的目的,可以在公有Student::average()函数中使用私有Student::Average()函数,包含使用对象来调用方法: double Student::Average() const { if (scores.size() > 0) return scores.sum() / scoresh.size(); else return 0; } 然而,私有继承使得能够使用类名和作用于解析运算符来调用基类的方法: double Student::Average() const { if (ArrayDb::size() > 0) return ArrayDb::sum() / ArrayDb::size(); else return 0; } 总之,使用包含是将使用对象名来调用方法,而使用私有继承时将使用类名和作用域解析运算符来调用方法。 3.访问基类对象 当派生类要使用基类对象本身,例如,Student类的包含版本实现了Name()方法,它返回string对象成员name;但使用私有继承时,该string对象没有名称。那么,Student类的代码如何访问内部的string对象呢? 答案是使用强制类型转换。由於Student类是从string类派生而来的,因此可以通过强制类型转换,将Student对象转换为string对象:结果为继承而来的string对象。本书前面介绍过,指针this指向用来调用方法的对象,因此*this为用来调用方法的对象,在这个例子中,为类型为Student的对象。为避免调用构造函数创建新的对象,可使用强制类型转换来创建一个引用。 const string & Student::Name() cosnt { return (cosnt string &) * } 上述方法返回一个引用,该引用指向用于调用该方法的Student对象中的继承而来的string对象。 4.访问基类的友元函数 用类名显式地限定函数名不适合于友元函数,这时因为友元不属于类。然而,可以通过显式地转换为基类来调用正确的函数。例如,对于下面的友元函数定义: ostream & operator<<(ostream & os, const Student & stu) { os << "Scores for " << (const string &) str << ":\n"; ... } 如果plato是一个Student对象,则下面的语句将调用上述函数,stu将是指向plato的引用,而 将是指向cout的引用: cout << 下面的代码: os << "Scores for " << (const string &) stu << ":\n"; 显式地将stu转换为string对象引用,进而调用函数operator<<(oshtream & const string &)。 引用stu不会自动转换为string对象引用。根本原因在于,在私有继承中,在不进行显式类型转换的情况下,不能将指向派生类的引用或指针赋给基类引用或指针。 然而,即使这个例子使用的是公有继承,也必须使用显式类型转换,原因之一是,如果不使用类型转换,下述代码将与友元函数原型匹配,从而导致递归调用: os << (注:我觉得这里的意思是:当我os << stu时,他发现是一个Student类型,但是Student类型没有operator<<()方法,所以函数回去找他的基类的方法,但是他的基类会发现它实际上是一个Student类型,于是又会调用Student的<<方法……) 5.使用修改后的Student类 …… 14.2.2 使用包含还是私有继承 通常,应使用包含来建立has-a关系;如果新类需要访问原有类的保护成员,或需要重新定义虚函数,则应使用私有继承。 14.2.3 保护继承 保护继承是私有继承的变体。保护及成在列出基类时使用关键字protected: class Student : protected std::string, protected std::valarray { ... }; 使用保护继承时,积累的共有成员和保护成员都将成为派生类的保护成员。和私有继承一样,积累的接口在派生类中也是可用的,但在继承层次结构之外是不可用的。当从派生类派生出另一个类时,私有继承和保护继承之间的主要区别便呈现出来了。使用私有继承时,第三代类将不能使用积累的接口,这时因为基类的公有方法在类中将变成私有方法;使用保护继承时,基类的公有方法在第二代中将编程受保护的,因此第三代派生类可以使用它们。 14.2.4 使用using重新定义访问权限 使用保护派生或私有派生时,基类的公有成员将称为保护成员或私有成员。假设要让基类的方法在派生类外面可用,方法之一是定义一个使用该基类方法的派生类方法。例如,假设希望Student能够使用valarray类的sum()方法,可以在Student类的声明中生命一个sum()方法,然后像下面这样定义该方法: double Student::sum() const
// public Student method { return std::valarray::sum();
// use privately-inherited method } 这样Student类便能够调用Student::sum(),后者进而将valarray::sum()方法应用于被包含的valarray对象(如果ArrayDb typedef在作用于中,也可以使用ArrayDb而不是std::valarray)。 另一种方法是,将函数调用包装在另一个函数调用中,即使用一个using声明(就像名称空间一样)来指出派生类可以使用特定的基类成员,即使采用的两是私有派生。例如,假设希望通过Student类能够使用valarray的方法min()和max(),可以在studenti.h的共有部分加入如下using声明: class Student : private std::string, private std::valarray { ... public: using std::valarray:: using std::valarray:: }; 上述using声明使得valarray::min()和valarray::max()可用,就像他们是Student的共有方法一样: cout << "high score: " << ada[i].max <double<::operator[]; 这将使两个版本(xonst和非const)都可用。这样,便可以删除Student::operator[]()的原型和定义。using声明只适用于继承,而不适用于包含。 有一种老式方式可用于在私有派生类中重新声明基类方法,即将方法名放在派生类的公有部分,如下所示: class Student : private std:stirng, private std:valarray { public: std::valarray::operator[];
// redeclare as public, just use name } 这看起来像不包含关键字using的using声明。这种方式已被废弃,即将停止使用。因此,如果编译器支持using声明,应使用它来使派生类可以使用私有基类中的方法。
免责声明:本站部分内容、图片、文字、视频等来自于互联网,仅供大家学习与交流。相关内容如涉嫌侵犯您的知识产权或其他合法权益,请向本站发送有效通知,我们会及时处理。反馈邮箱&&&&。
学生服务号
在线咨询,奖学金返现,名师点评,等你来互动小白求问,C++Primer和C++Primer Plus有什么区别?【编程吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:191,348贴子:
小白求问,C++Primer和C++Primer Plus有什么区别?收藏
还有,零基础自学c++的适合看哪本??
编程交流中心,教您编程!达内it软件编程专家,培养更多高端it人才.达内美国上市公司,新的教学模式,国内好的教师团队,让学生轻松学习.
可以先看c++ primer plus第6版。
登录百度帐号推荐应用&>&&>&《C++ Primer Plus第6版中文版》学习笔记
《 C++ Primer Plus第6版中文版》学习笔记,十分详细,可以结合原书阅读。
所需积分:0
下载次数:271
资源大小:3.3MB
上传时间:
上传者:qq所需积分:0
下载次数:239
资源大小:759KB
上传时间:
上传者:qq所需积分:0
下载次数:233
资源大小:518KB
上传时间:
上传者:qq所需积分:0
下载次数:227
资源大小:405KB
上传时间:
上传者:qq所需积分:0
下载次数:232
资源大小:1.07MB
上传时间:
上传者:qq所需积分:0
扫描微信二维码精彩活动、课程更新抢先知
$album->title ?>
所需积分:0
剩余积分:
您当前C币:150
可兑换下载积分: 300
兑换下载分:
兑换失败,您当前C币不够,请先充值C币
消耗C币:0
你当前的下载分为 。前去下载资源
VIP会员免积分下载
会员到期时间:
剩余下载次数:
你还不是VIP会员
开通VIP会员权限,免积分下载
所需积分:0
剩余积分:
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
积分不够下载该资源
如何快速获得积分?

我要回帖

更多关于 机械键盘轴的区别 的文章

 

随机推荐