《Thinking in c++》学习笔记

    2014-01-10 00:00     0 条评论

《Thinking in cpp》学习笔记

0 Legacy Task

1 对象导论

1.1 抽象的过程

1.2 对象有一个接口

1.7 创建和销毁对象

从技术角度,OOP的论域就是抽象数据类型(封装)、继承和多态性。但是,其它一些问题也是重要的,特别重要的是对象创建和销毁的方法。

为了最大化运行速度,C++将对象存放在中或静态存储区域中,存储和生命期可以在编写程序时确定。

栈是内存中的一个区域,可以直接由CPU在程序执行期间存放数据。在栈中的变量有时成为自动变量(automatic variable)局部变量(scoped variable)
静态存储区域简单说是内存的一个固定块,在程序开始执行以前分配。使用栈或静态存储区,可以快速分配和释放。

第二种方法是在称为堆(heap)的区域动态创建对象。用这种方法,可以直到运行时还不知道需要多少个对象。它们的生命周期和数据类型,取决于程序运行的时候。如果需要新的对象,直接使用new关键字让它在堆上生成,当使用结束时,使用delete关键字释放。

1.11 为什么C++会成功

  1. 一个较好的c
  2. 延续式学习的过程,c的延续,对C程序员而言
  3. 效率,非正式的数据表示,和C语言相比,面相对象的C++程序的速度与使用C写的程序的速度相差在 正负10%之内
  4. 系统更容易表达和理解(OOP)
  5. 尽量使用库。使用已经写好的代码库,更好的延续。
  6. 利用目标的源代码重用。
  7. 错误处理
  8. 大型程序设计

2 对象的创建和使用

关于带空参数表的函数,c和c++有很大的不同。在C语言中,声明

int fun();

表示“一个可待任意参数(任意数目,任意类型)的函数”。这就妨碍了类型检查,而在C++中它就意味着“不带参数的函数”。

extern关键字,它表示变量是在文件以外定义的,或在文件后面部分才定义。extern既可以用于变量声明,也可用于函数声明。

2.3 编写第一个C++程序

2.3.1 使用iostream类

#include<iostream>

2.3. 2 名字空间(namespace)

using关键字.

定义名字空间

调用其它程序

使用stdio.h中的system()函数。

2.5 字符串介绍

2.6 文件的读写

在C++中为了打开文件进行读写操作,必须包含.
为了读而打开文件,要创建一个ifstream对象,它 的用法与cin相同,为了写文件而打开一个文件,需要创建一个ofstream对象。一旦打开了一个文件,就可以像处理其它iostream对象那也对它进行读写

//文件操作
ifstream in("main.cpp");//open for reading
ofstream out("main2.cpp");
string s;
while (getline(in, s)) {
        //getline()逐行读取字符,遇到换行符终止。ps:getline()将丢弃换行符,所以需要手动加上换行
        cout <<"- " + s << "";
        out << s << "";
}

2.7 vector介绍

vector类是一个模板(template),也就是说它可以有效的用于不同的类型,模板几乎可以创建“任何事物的类”

3 C++中的C

在C++编程时,当前C函数库中的所有函数都可以使用。在定义自己的函数之前,应该仔细看一下函数库,可能已经有人解决了我们的问题,而且进行了更多的思考和调试。

注意:尽管很多编译器包含了大量的额外函数可以使编程更容易,吸引大家去使用,单是这并不是标准C库的一部分。需要考虑移植到其它平台上的话,应该避免使用这些函数

3.4 数据类型简介

3.4。1 基本内部类型

标准C的内部类型(由C++继承)规范不说明每一个内部类型必须有多少位。规范只规定内部类型必须能存储的最大值和最小值。系统头文件limits.hfloat.h

3.6 指定存储空间分配

3.6.1 全局变量

全局变量是在所有函数体的外部定义的,程序的所有部分(甚至其它文件中的代码)都
可以使用,全部变量使用extern关键字进行声明。

3.6.2 局部变量

寄存器变量 (register variable),关键字register告诉编译器“尽可能快地访问这个变量”,加快访问速度。但是,正如名字所暗示的那样,这经常是通过将变量在寄存器中来做的,但这并不能保证变量放置在寄存器中,深知页不能保证提高访问速度。

3.6.3 静态变量(static)

3.6.4 外部变量

3.6.5 常量

3.6.6 volatile变量

限定词 const 告诉编译器“这是不会改变的”;而限定词volatile则告诉编译器“不知道何时会改变”。防止编译器跟进变量的稳定性做任何优化。

4 数据抽象

5 隐藏实现

5.2 C++的访问控制

public ,protected , private.

5.3 友元

6 初始化与清除

7 函数重载与默认参数

8 常量

9 内联函数

10 名字控制

11 引用和拷贝构造函数

12 运算符重载

13 动态对象创建

有时外面可能知道程序中对象的确切数量、类型和生命期。但情况并不总是这样。

C语言中早就提供了动态内存分配(dynamic memory allocation)函数malloc()和free(),这些函数将在运行时从堆(也称自由内存)中分配存储单元。

在C++中,我们将使用new和delete来在堆上安全地创建/销毁对象。

14 继承和组合

15 多态和虚函数

纯虚函数的定义,使用virtual关键字,并在其后面加上 =0

    virtual void fun() = 0;

16 模板介绍

本文地址:https://www.yhawaii.net/25.html
版权声明:本文为原创文章,版权归  所有,欢迎分享本文,转载请保留出处!

 发表评论


表情