//

//  effective c++.cpp

//  笔记

//

//  Created by fam on 15/3/23.

//

//

//---------------------------15/03/23----------------------------

//#01   视c++为一个语言联邦

{

/*

1:c++如今支持的编程形式:

1:过程形式  2:面向对象形式  3:函数形式   4:泛型形式   5:元编程形式

2:c++的4个次语言:

1> c: 说到底c++还是以c为基础的。

2> object-oriented c++。也就是封装、继承、多态

3>template c++。泛型编程,他带来了一个崭新的编程范型,也就是模版元编程

4>STL。STL标准库。

*/

}

//#02   尽量以const,enum,inline替换 #define

{

/*

1:如果使用#define定义常量很可能找不到错误位置。此时用const来替换之,

使用const还有个好处是,不会出现多份字符常量。

关于const:

1>当要使用一个指向常量字符串的常量指针是,最好使用const string

使用 const std::string authorName("Scott Meyers");

替换掉 const char* const authorName ="Scott Meyers";

2>class的专属常量

class GamePlayer

{

private:

static const int NumTurns = 5;

int scores[NumTurns];

};

这里的NumTurns只是一个声明式,如果要取他的地址必须在之后给出定义:

const int GamePlayer::NumTurns;

2:如果编译器不支持以上的static const来做初值设定可以改用 enum

class GamePlayer

{

private:

enum{ NumTurns = 5 };

int scores[NumTurns];

};

关于enum:

1> enum的行为比较像#define,enum无法取地址

2> 纯粹的使用主义。enum是模版元编程的基础技术

3:使用inline来替换函数宏。又安全,又可以写出模版元编程

总结:对于常量,使用const enum来替换#define

对于形式函数的宏,使用inline来替换#define

*/

}

//#03   尽可能使用const

{

/*

1:const可以减少客户操作错误而造成意外,又不至于放弃安全性和高效性

很重要的一点关于+ - * /等运算符操作返回一个const类型是很好的选择

const Rational operator*(const Rational& lhs, const Rational& rhs);

可以避免一下的操作

Rtional a,b,c;

(a*b) = c;

2:const成员函数

将const实施于成员函数的目的,是为了确认该成员函数可作用于const对象身上。这类成员函数

重要的原因:

1>它们使class借口比较容易被理解。我们可以很容易地知道哪个函数可以改变对象内容,

哪个不行(这也是const成员函数的作用,加了const修饰符就表示不可修改)。

2>它们是的“操作const对象”成为可能。(当操作对象是const时优先调用const成员函数,相当于重载)

这是编写高效代码的关键,因为改善程序效率的根本办法是pass by reference-to-const

(也就是传入一个const修饰的引用)

关于下面的class

class TextBlock

{

public:

const char& operator[](std::size_t position) const

{ return text[position];}

char& operator[]((std::size_t position)

{ return text[position];}

private:

std::string text;

{;

const成员函数可以控制const对象operator[]操作返回的值是const属性的

TextBlock tb("Hello");

const TextBlock ctb("World");

tb[0]='x'; //对的,tb是non_const对象,调用non_const版本的成员函数,返回值可以赋值

ctb[0]='x'; //错,ctb时const对象 operator[]操作调用const成员函数

//返回const类型值所以无法完成赋值操作

如果去掉const成员函数,那么const类型的对象返回的也是
可以修改的返回值。

如果去掉non_const成员函数,那么不管是不是const类型的对象,返回的都是不能修改的
返回值.

*/

}

最新文章

  1. Hyperledge 开发环境配置常见问题
  2. SQL优化 CREATE STATISTICS
  3. 浏览器JS脚本
  4. 通过自己技能把某个网站的ppt全部下载下来的过程
  5. 图片(img标签)的onerror事件
  6. Nova分析(1)——整体架构
  7. Eclipse调试Java的十个技巧
  8. 编译驱动时出现"Cannot open file trace.h"错误
  9. news总结
  10. TOJ3660家庭关系(并查集+hash+图的连通性)
  11. ios GCD的使用及封装
  12. Flex 国际化(中英语言适配)
  13. 201521123051《java程序设计》 第五周学习总结
  14. java新知识系列 五
  15. [译]RabbitMQ教程C#版 - 发布订阅
  16. Intellij Idea 解决字符乱码、设定颜色主题、字体
  17. Hadoop学习------Hadoop安装方式之(三):分布式部署
  18. CheckBox-复选框-删除-选中行
  19. Python+OpenCV图像处理(六)—— ROI与泛洪填充
  20. MyBatis insert操作返回主键

热门文章

  1. Oracle EBS OPM close batch
  2. net.exe use命令的使用
  3. 远程桌面web连接
  4. UNIX高级环境编程(10)进程控制(Process Control)- 竞态条件,exec函数,解释器文件和system函数
  5. rename 批量修改文件名简单用法
  6. Windows Server 2008远程桌面端口更改方法
  7. nginx之location.md
  8. python string.md
  9. memcached未授权
  10. mysql 压缩备份 压缩还原 命令