//

//  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类型的对象,返回的都是不能修改的
返回值.

*/

}

effective c++ 笔记 (1-3)的更多相关文章

  1. Effective Java笔记一 创建和销毁对象

    Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...

  2. [Effective JavaScript 笔记] 第4条:原始类型优于封闭对象

    js有5种原始值类型:布尔值.数字.字符串.null和undefined. 用typeof检测一下: typeof true; //"boolean" typeof 2; //&q ...

  3. [Effective JavaScript 笔记] 第5条:避免对混合类型使用==运算符

    “1.0e0”=={valueOf:function(){return true;}} 是值是多少? 这两个完全不同的值使用==运算符是相等的.为什么呢?请看<[Effective JavaSc ...

  4. [Effective JavaScript 笔记]第3章:使用函数--个人总结

    前言 这一章把平时会用到,但不会深究的知识点,分开细化地讲解了.里面很多内容在高3等基础内容里,也有很多讲到.但由于本身书籍的篇幅较大,很容易忽视对应的小知识点.这章里的许多小提示都很有帮助,特别是在 ...

  5. [Effective JavaScript 笔记]第27条:使用闭包而不是字符串来封装代码

    函数是一种将代码作为数据结构存储的便利方式,代码之后可以被执行.这使得富有表现力的高阶函数抽象如map和forEach成为可能.它也是js异步I/O方法的核心.与此同时,也可以将代码表示为字符串的形式 ...

  6. [Effective JavaScript 笔记]第28条:不要信赖函数对象的toString方法

    js函数有一个非凡的特性,即将其源代码重现为字符串的能力. (function(x){ return x+1 }).toString();//"function (x){ return x+ ...

  7. java effective 读书笔记

    java effective 读书笔记 []创建和销毁对象 静态工厂方法 就是“封装了底层 暴露出一个访问接口 ” 门面模式 多参数时 用构建器,就是用个内部类 再让内部类提供构造好的对象 枚举 si ...

  8. Effective STL 笔记 -- Item 6 ~ 7: Container and Object Pointer

    Effective STL 笔记 – Item 6 ~ 7: Container and Object Pointer 中间两次笔记被删掉了,简单补一下: Item 3 中提到如果将对象直接放入容器中 ...

  9. Item 5:那些被C++默默地声明和调用的函数 Effective C++笔记

    Item 5: Know what functions C++ silently writes and calls 在C++中,编译器会自己主动生成一些你没有显式定义的函数,它们包含:构造函数.析构函 ...

随机推荐

  1. 【SPL标准库专题(2)】 Iterator

    Iterator界面 本段内容来自阮一峰老师再加自己的部分注解 SPL规定,所有部署了Iterator界面的class,都可以用在foreach Loop中.Iterator界面中包含5个必须部署的方 ...

  2. glViewport()函数和glOrtho()函数的理解(转)

    http://www.cnblogs.com/yxnchinahlj/archive/2010/10/30/1865298.html 在OpenGL中有两个比较重要的投影变换函数,glViewport ...

  3. 1.Solr介绍

    转载请出自出处:http://www.cnblogs.com/hd3013779515/ Solr是一个基于Lucene的全文搜索引擎,同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,实现 ...

  4. 乐视4.14硬件免费日de用户体验

    此贴用于记录2016年4月14日乐视硬件免费日购买X65超级电视的用户体验.后续将动态更新 我是乐视电视的第一批用户,从乐视上市第一批超级电视,我先后帮助家人.同事.朋友买了6台乐视超级电视,也算是乐 ...

  5. jQuery做字符串分隔

    var str=new String(); var arr=new Array(); str="ddd,dsd,3,dd,g,k"; //可以用字符或字符串分割 arr=str.s ...

  6. 根据拼音首字母进行过滤的combobox

    keywords: 拼音 首字母 过滤 在combobox中输入汉字拼音的首字母时,下面列出对应的可选项,就像下面这样 1. 首先在数据库中需要设计一个表,专门用来存放药物及对应的拼音首字母,这样当用 ...

  7. 在 Laravel 5 中集成七牛云存储实现云存储功能

    本扩展包基于https://github.com/qiniu/php-sdk开发,是七牛云储存 Laravel 5 Storage版,通过本扩展包可以在Laravel 5中集成七牛云存储功能.   1 ...

  8. div宽度随屏幕大小变化

    题目: 一个页面上两个div左右铺满整个浏览器, 要保证左边的div一直为100px,右边的div跟随浏览器大小变化, 比如浏览器为500,右边div为400,浏览器为900,右边div为800. 方 ...

  9. Spring(十六)之MVC框架

    MVC 框架教程 Spring web      MVC 框架提供了模型-视图-控制的体系结构和可以用来开发灵活.松散耦合的 web 应用程序的组件.MVC 模式导致了应用程序的不同方面(输入逻辑.业 ...

  10. Drool实战系列(二)之eclipse安装drools插件

    这里演示是drools7.5.0,大家可以根据自己需要安装不同的drools版本 drools安装地址: http://download.jboss.org/drools/release/ 一. 二. ...