相关推荐
-
More Effective C++ 第六部分 杂项讨论
32.在未来时态下发展程序软件最初的开发与后续开发和维护的人通常不是同一批,所有我们需要强制某些规范,例如利用c++语言特性强制对象产生与heap内。不要想着我记得不去做某些事就行,需要强制实行。确保operator和函数拥有自然的语意。应和内建类型一样,如果疑惑,不妨看看ints有怎样的表现。任何事情之一有人能做,就会有人做。例如抛出异常,将对象自我赋值,在为获得初值前使用对象,给函数非法的值……
-
c++ 继承机制易犯的错误
继承作为面向对象的基本特征之一,其使用率极高。不管是为了实现软件的基本功能,还是再程序的重构的过程中,我们总是会用到继承机制。正是因为其用途极为广泛,而且使用简单,大众程序员对其真正的内部实现机制的探究不是很深。而且,在大部分情况下,我们对继承的使用方法是错误的。下面用例子来说明问题。 class Animal { public: Animal &operator=(
-
Effective C++ 读书笔记 Item33 避免隐藏继承来的名称(继承与作用域嵌套)
其实本文的话题和继承完全没有关系,隐藏名称是作用域的问题。 在C++中每一对{}都会开启一个新的作用域,并嵌套在当前作用域中。 一个示例 int x; void func(){ double x; cin>>x; // read a new value for local x } 可以看到double x隐藏了int x,因为C++的名称隐藏规则(n...
-
【M33】将非尾端类设计为抽象类
1、考虑下面的需求,软件处理动物,Cat与Dog需要特殊处理,因此,设计Cat和Dog继承Animal。Animal有copy赋值(不是虚方法),Cat和Dog也有copy赋值。考虑下面的情况: Cat cat1; Cat cat2; Animal *a1 = &cat1; Animal *a2 = &cat2; *a1 = *a2; 思考*a1 = *a2会有什么问题? co...
-
More Effective C++ 条款33 将非尾端(non-leaf classes)设计为抽象类(abstract classes)
1. 假如程序有一个Chicken class,Lizard class,Animal class,其中Chicken class和Lizard class继承自Animal class,整个继承体系像这样: Animal负责具体化所有东吴的共同特征,Lizard和Chicken是需要特殊对待的两种动物,它们的简化定义像这样: class Animal { pu...
-
More Effective C++之33
条款33:将非尾端类(non-leaf classes)设计为抽象类(abstract classes) 这一原则是绝对合适的,然而我们在应用的时候往往违反这一原则。我在目前的设计中就违反了这一原则,但好在我的对象都是独立的,不存在相互之间的关联关系,那我需要注意的就是虚函数的实现,这个地方是个比较大的隐患。为什么要这么做?它可以提高代码的健壮度,可靠度,精巧度和可扩充度。
-
33 将非尾端类(non-leaf classes)设计为抽象类(abstract classes)
假设你正在进行一个项目,用软件来处理动物。只有两种动物:蜥蜴和鸡,如下是组织形式: Animal class 将负责你所处理的所有动物的共同特征具现化,Lizard和Chicken class则分别将Animal特殊化为蜥蜴和鸡: class Animal { public: Animal& operator = (const Animal& rhs); ... };...
-
条款M33:将非尾端类设计为抽象类:将抽象类赋值运算符函数设为protected
1、常遇到的代码问题: class Animal { //抽象类 public: Animal& operator=(const Animal& rhs); virtual ~Animal() = 0; //cpp文件必须提供实现 }; class Lizard: public Animal { public: Lizard& operator=(const...
-
《More Effictive C++》学习笔记 — 杂项
《More Effictive C++》学习笔记 — 杂项条款33 — 将非尾端类设计为抽象类1、赋值操作符的切割问题2、使用虚函数赋值3、使用RTTI 条款33 — 将非尾端类设计为抽象类 假设我们正在做一个项目,以软件来处理动物。大部分动物的实现都一致,其中有两种动物需要特殊处理:蜥蜴和鸡,在此情况下,这几个类之间的关系可能是这样的: Animal 类负责处理所有的动物的共同特征,Lizard 和 Chicken 负责两种动物的特化处理。 1、赋值操作符的切割问题 class Animal { pub
-
<More Effective C++>笔记--其他杂项
5 其他杂项 ~~~~~~~~~~~ 5.1 在未来时态下开发程序 ========================= 1. 用C++语言自己来表达设计上的约束条件,而不是用注释或文档 2. 未来时态的考虑不是问一个类现在正被怎么使用,而是问这个类是被设计为怎么去使用的. 3. 未来时态的考虑只是简单地增加了一些额外约束: ...
-
【M32】在未来时态下发展程序
1、在未来时态下发展程序,就是接受“事情总会变化”的事实,并准备应对之策。 2、记住,程序的维护者通常不是最初的开发者,因此,设计和实现的时候,应该考虑别人更好地理解,修改自己的程序。 3、重要的一点就是,以C++语言本身来表现各种规范,而不是依靠注释或者说明文件。举例来说,如果copy构造和copy赋值没有意义,应该将他们声明为private。而不是简单地通过注释告诉用户,不要进行copy构...
-
More effective C++学习总结
More effective C++摘要3 基础议题部分:3.1 M1:指针与引用的区别首先,要认识到在任何情况下都不能使用指向空值的引用,引用必须被初始化。一个引用必须总是指向某些对象。(不存在指向空值的引用意味着使用引用的代码效率比使用指针的要高)其次,指针可以被重新赋值以指向另一个不同的对象。什么情况下应该使用指针? 1存在不指向任何对象的可能。 2能够在不同时刻指向不同对象什么情况下应该使
-
More Effective C 学习笔记六: 杂项
1.在未来时态下开发程序 用c++语言来表达设计上的约束条件,而不是使用注释或者文档。 注意虚析构函数 等等 2.将非尾端类设计为抽象类 3.如何在同一程序中混合使用c++和c 确保产生兼容的obj文件 名变换 因为c没有函数重载,所以没有名称变换,所有需要显示告诉c++编译器不能对其他语言的函数进行名称变换, 使用 extern 'C'指示。不仅仅指示c语言, 通过只...
-
More Effective C++ 35个做法
前言 最近在看《More Effective C++》这个书,自己 C++ 基础还是不行,有的地方看的有点懵,最后还是坚持看完了,做做笔记,简短的 记录一下有哪些改善编程与设计的有效方法。 推荐还是可以买一本原书的,书中例子比较丰富,更容易理解一些。 一、基础议题 1. 仔细区别指针(pointer)和引用(reference) 指针可以指向 null,引用不允许指向 null。 指针可以重新被赋...
-
Effective C++之 Item 33: 避免覆盖(hiding)“通过继承得到的名字”
莎士比亚有一个关于名字的说法。"What's in a name?" 他问道,"A rose by any other name would smell as sweet."(语出《罗密欧与朱丽叶》第二幕第二场,朱生豪先生译为:“姓名本来是没有意义的;我们叫做玫瑰的这一种花,要是换了个名字,他的香味还是同样的芬芳。”梁实秋先生译为:“姓算什么?我们所谓有玫瑰,换个名字,还是一样的香。”——译者注...
-
more effective C++在未来时态下发展程序
在未来时态下发展程序 所谓的未来时态就是接受事物总会改变的事实,并准备应对之道。我们应该以C++本身来表现各种规范而不是简单的以注释和说明文档的形式: 如果我们的类不想被继承那么我们就可以把构造函数以及复制构造函数声明为private(这样的函数不能够被构造),然后再类中声明我们自己的伪构造函数。 如果一个class必须生成在heap内,在不被继承的情况下我们可能考虑把对象的析构函数声明为p
-
读书笔记MoreEffectiveC++(33)
将非尾端类设计为抽象类 1.绝大部分纯虚函数都没有实现,但纯虚析构函数是个特例。它们必须被实现,因为它们在派生类析构函数被调用时也将被调用。而且,它们经常执行有用的任务,诸如释放资源(见Item M9)或纪录消息。实现纯虚函数一般不常见,但对纯虚析构函数,它不只是常见,它是必须。
-
32 在未来时态下发展程序
好的软件对于变化有良好的适应性。好的软件可以容纳新的性质,可以移植到新的平台,可以适应新的需求,可以掌握新的输入。所谓的未来时态下设计程序,就是接受“事情总会改变”的事实,并准备应付之道。程序的维护者通常不是当初的开发者,所以设计和实现时应该注意到如何帮助其他人理解、修改、强化你的程序。 未来式思维只不过是加上一些额外的考虑: 提供完整的classes——即使某些部分目前用不到。 设计你的接...
18 楼 maycoolboy 2010-04-23 19:45
17 楼 itmuse 2010-04-23 17:22
16 楼 zpzxsk_123 2010-04-23 17:18
找了好久!
15 楼 烟雨一点尘 2010-04-22 21:48
14 楼 robyjeffding 2010-04-22 19:37
13 楼 shinezhou 2010-04-22 17:52
12 楼 chnlslc 2010-04-22 15:48
11 楼 qubic 2010-04-22 15:31
10 楼 pgy20032000 2010-04-22 09:45
9 楼 fuxin116518 2010-04-22 09:15
8 楼 kjj 2010-04-22 01:29
7 楼 wukele 2010-04-21 23:41
6 楼 wjpiao 2010-04-21 23:20
5 楼 keel 2010-04-21 22:57
4 楼 halk 2010-04-21 22:44
3 楼 烟雨一点尘 2010-04-21 22:27
2 楼 太平洋1986 2010-04-21 17:57
1 楼 mblmh2008 2010-04-21 17:08