Fork me on GitHub

03 2017 档案

摘要:1. 显示接口和运行时多态 面向对象编程的世界围绕着显式接口和运行时多态。举个例子,考虑下面的类(无意义的类), 考虑下面的函数(同样没有意义), 对于doProcessing中的w,我们可以这样说: 因为w被声明为Widget类型,w必须支持Widget接口。我们可以在源码中搜寻这个接口(例如,在 阅读全文
posted @ 2017-03-30 22:56 HarlanC 阅读(869) 评论(0) 推荐(0) 编辑
摘要:1. 多继承的两个阵营 当我们谈论到多继承(MI)的时候,C++委员会被分为两个基本阵营。一个阵营相信如果单继承是好的C++性质,那么多继承肯定会更好。另外一个阵营则争辩道单继承诚然是好的,但多继承太麻烦,而不值得去使用它。在这个条款中,我的主要目标是让你明白多继承的这两个观点。 2. 从多个基类中 阅读全文
posted @ 2017-03-29 21:23 HarlanC 阅读(1003) 评论(0) 推荐(0) 编辑
摘要:1. private 继承介绍 Item 32表明C++把public继承当作”is-a”关系来对待。考虑一个继承体系,一个类Student public 继承自类Person,如果一个函数的成功调用需要从Student到Person的隐式转换,这时候“is-a”关系就出现了。对于一部分实例,使用p 阅读全文
posted @ 2017-03-28 21:14 HarlanC 阅读(926) 评论(0) 推荐(1) 编辑
摘要:1. 什么是组合(composition)? 组合(composition)是一种类型之间的关系,这种关系当一种类型的对象包含另外一种类型的对象时就会产生。举个例子: 在这个例子中,Person对象由string,Address和PhoneNumber对象组成。对于程序员来说,术语组合(compos 阅读全文
posted @ 2017-03-27 20:36 HarlanC 阅读(990) 评论(0) 推荐(0) 编辑
摘要:从一开始就让我们简化这次的讨论。你有两类你能够继承的函数:虚函数和非虚函数。然而,重新定义一个非虚函数总是错误的(Item 36),所以我们可以安全的把这个条款的讨论限定在继承带默认参数值的虚函数上。 1. 虚函数是动态绑定的,而默认参数是静态绑定的 在这种情况下,这个条款的验证就相当直接了:虚函数 阅读全文
posted @ 2017-03-25 17:50 HarlanC 阅读(1016) 评论(2) 推荐(1) 编辑
摘要:1. 为什么不要重新定义继承而来的非虚函数——实际论证 假设我告诉你一个类D public继承类B,在类B中定义了一个public成员函数mf。Mf的参数和返回类型并不重要,所以假设它们都是void。实现如下: 我们不需要了解B,D或者mf的任何细节,考虑一个类型D的对象x, 你会感到很吃惊,如果下 阅读全文
posted @ 2017-03-24 20:12 HarlanC 阅读(810) 评论(0) 推荐(0) 编辑
摘要:1. 突破思维——不要将思维限定在面向对象方法上 你正在制作一个视频游戏,你正在为游戏中的人物设计一个类继承体系。你的游戏处在农耕时代,人类很容易受伤或者说健康度降低。因此你决定为其提供一个成员函数,healthValue,返回一个整型值来表明一个人物的健康度。因为不同的人物会用不同的方式来计算健康 阅读全文
posted @ 2017-03-23 21:47 HarlanC 阅读(1619) 评论(2) 推荐(1) 编辑
摘要:原文链接 http://marknelson.us/2014/09/11/highlights-of-iso-c14/ 下面是对你的日常开发有重大影响的C++14新变动,列出了一些示例代码,并讨论何时以及为什么要使用它们。 1. 返回值类型推导(Return type deduction) 对aut 阅读全文
posted @ 2017-03-21 20:29 HarlanC 阅读(7631) 评论(0) 推荐(2) 编辑
摘要:看上去最为简单的(public)继承的概念由两个单独部分组成:函数接口的继承和函数模板继承。这两种继承之间的区别同本书介绍部分讨论的函数声明和函数定义之间的区别完全对应。 1. 类函数的三种实现 作为一个类设计者,有时候你只想派生类继承成员函数的接口(声明)。有时候你想让派生类同时继承接口和实现,但 阅读全文
posted @ 2017-03-20 22:26 HarlanC 阅读(1083) 评论(0) 推荐(0) 编辑
摘要:1. 普通作用域中的隐藏 名字实际上和继承没有关系。有关系的是作用域。我们都知道像下面的代码: 读入x的声明指向的是本地的x而不是全局的x,因为内部作用域的名字将外部作用域的变量隐藏掉了。我们将作用域的这种情况用以下方式进行可视化: 当编译器在someFunc的作用域中时,遇到了名字x,它们先在本地 阅读全文
posted @ 2017-03-15 20:56 HarlanC 阅读(1039) 评论(0) 推荐(1) 编辑
摘要:1. 何为public继承的”is-a”关系 在C++面向对象准则中最重要的准则是:public继承意味着“is-a”。记住这个准则。 如果你实现一个类D(derived)public继承自类B(base),你在告诉c++编译器(也在告诉代码阅读者),每个类型D的对象也是一个类型B的对象,反过来说是 阅读全文
posted @ 2017-03-14 22:28 HarlanC 阅读(898) 评论(0) 推荐(1) 编辑
摘要:1. 牵一发而动全身 现在开始进入你的C++程序,你对你的类实现做了一个很小的改动。注意,不是接口,只是实现,而且是private部分。然后你需要rebuild你的程序,计算着这个build应该几秒钟就足够了。毕竟,只修改了一个类。你点击了build 或者输入了make( 或者其他方式),你被惊到了 阅读全文
posted @ 2017-03-12 16:25 HarlanC 阅读(1331) 评论(0) 推荐(0) 编辑
摘要:最近北京房价蹭蹭猛涨,买了房子的人心花怒放,没买的人心惊肉跳,咬牙切齿,楼主作为北漂无房一族,着实又亚历山大了一把,这些天晚上睡觉总是很难入睡,即使入睡,也是浮梦连篇,即使亚历山大,对C++的热情和追求还是不减,应该是感动了周公吧,梦境从此处开始,大师入场来给我安慰了。。。 11点躺在床上了,脑子里 阅读全文
posted @ 2017-03-08 21:36 HarlanC 阅读(1211) 评论(0) 推荐(3) 编辑
摘要:很想知道现在程序猿使用的开发语言分布情况,在投票网上发起了一个投票,想借助于博客园博主,粉丝群体的庞大数量,得出一个有借鉴意义的结果。。。希望编辑不要删帖啊。。谢过了,时间定了一周,一周后出结果。。 互联网行业进这里: 入口 传统IT行业进这里: 入口 阅读全文
posted @ 2017-03-08 14:12 HarlanC 阅读(280) 评论(0) 推荐(0) 编辑
摘要:异常安全在某种意义上来说就像怀孕。。。但是稍微想一想。在没有求婚之前我们不能真正的讨论生殖问题。 假设我们有一个表示GUI菜单的类,这个GUI菜单有背景图片。这个类将被使用在多线程环境中,所以需要mutex进行并发控制。 我们看一种PrettyMenu的changeBackground函数的可能实现 阅读全文
posted @ 2017-03-07 21:14 HarlanC 阅读(769) 评论(0) 推荐(1) 编辑
摘要:假设你正在操作一个Rectangle类。每个矩形可以通过左上角的点和右下角的点来表示。为了保证一个Rectangle对象尽可能小,你可能决定不把定义矩形范围的点存储在Rectangle类中,而是把它放入一个辅助结构体中,Rectangle中声明一个指向它的指针就可以了: 1. 由返回指向对象内部数据 阅读全文
posted @ 2017-03-06 23:27 HarlanC 阅读(898) 评论(0) 推荐(0) 编辑
摘要:此文是如下博文的翻译: https://herbsutter.com/elements-of-modern-c-style/ C++11标准提供了许多有用的新特性。这篇文章特别针对使C++11和C++98相比看上去像一门新语言的特性,因为: C++11的这些特性改变了书写C++代码的风格和习惯,也改 阅读全文
posted @ 2017-03-05 10:16 HarlanC 阅读(19360) 评论(0) 推荐(5) 编辑
摘要:C++设计的规则是用来保证使类型相关的错误不再可能出现。理论上来说,如果你的程序能够很干净的通过编译,它就不会尝试在任何对象上执行任何不安全或无意义的操作。这个保证很有价值,不要轻易放弃它。 不幸的是,casts颠覆了类型系统。它导致了各种麻烦的出现,一些很容易识别,一些却很狡猾(不容易被识别)。如 阅读全文
posted @ 2017-03-04 10:20 HarlanC 阅读(1021) 评论(0) 推荐(0) 编辑
摘要:1. 定义变量会引发构造和析构开销 每当你定义一种类型的变量时:当控制流到达变量的定义点时,你引入了调用构造函数的开销,当离开变量的作用域之后,你引入了调用析构函数的开销。对未使用到的变量同样会产生开销,因此对这种定义要尽可能的避免。 2. 普通函数中的变量定义推迟 2.1 变量有可能不会被使用到的 阅读全文
posted @ 2017-03-03 19:17 HarlanC 阅读(717) 评论(0) 推荐(0) 编辑
摘要:1. swap如此重要 Swap是一个非常有趣的函数,最初作为STL的一部分来介绍,它已然变成了异常安全编程的中流砥柱(Item 29),也是在拷贝中应对自我赋值的一种普通机制(Item 11)。Swap非常有用,恰当的实现swap是非常重要的,与重要性伴随而来的是一些并发症。在这个条款中,我们将探 阅读全文
posted @ 2017-03-02 21:36 HarlanC 阅读(827) 评论(0) 推荐(0) 编辑
摘要:1. 将需要隐式类型转换的函数声明为成员函数会出现问题 使类支持隐式转换是一个坏的想法。当然也有例外的情况,最常见的一个例子就是数值类型。举个例子,如果你设计一个表示有理数的类,允许从整型到有理数的隐式转换应该是合理的。在C++内建类型中,从int转换到double也是再合理不过的了(比从doubl 阅读全文
posted @ 2017-03-01 08:14 HarlanC 阅读(722) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示