C++编程思想 第二章 对象的创建与使用

1语言的翻译过程

静态类型检查

类型检查(type checking)是编译器在第一遍中完成的。类型检查是检查函数参数是否正确使用,以防止许多程序设计错误。由于类型检查是在编译阶段而不是程序运行阶段进行的,所以称之为静态类型检查(static type checking)

分段编译工具

2.1声明与定义

2.1.2 对于带空参数表的函数,

c语言中,声明

int func2();

表示“一个可带任意参数(任意数目,任意类型)的函数”。这就妨碍了类型检查。

而在C++语言中他就意味着“不带参数的函数”。

2.1.3 函数的定义

函数定义看起来像函数声明,但它还有函数体 

2.1.4 变量声明的语法

对于变量的声明,C/C++需要一个关键字来说明“这只是一个声明,它的定义在别的地方”。这个关键字就是extern,它表示变量是在文件以外定义的,或在文件后面部分才定义。

对函数声明,因为没有函数体,编译器必定把它作为声明而不是函数定义。extern关键字对函数来说是多余的、可选的,函数定义时则要求要有标识符(这里指C语言,而C++不要求)。

   2.1.5 包含头文件

#include有两种方式来制定文件:尖括号(<>)或双引号。

#include <header>

用尖括号来指定文件时,预处理器是以特定的方式来寻找文件,一般是环境中或编译器命令行指定的某种寻找路径。这种设置寻找路径的机制随机制随机器、操作系统、C++实现的不同而不同,要视具体情况而定。

#include  “local.h”

用双引号时,预处理器以“定义实现的路径”来寻找文件。它通常是从当前目录开始寻找,如果文件没有找到,那么include 命令就按与尖括号同样的方式重新开始寻找。(ps:搜索的文件夹更多。如果不是自己创建的头文件,就尖括号了,嗯,是这个意思,要不影响速度)

2.1.6 标准C++ include 语句格式

标准使用的格式允许文件名长度可以大于众所周知的八个,去除了扩展名。

C继承下来的带有传统”.h”扩展名的库仍然可用。然而,也可以使用更现代的C++风格使用它们,即在文件名前加一个字母”c”。这种方式提供了一个区分标志,说明所使用的C还是C++库。

#include <stdlib.h>

变成

#include <cstdlib>

2.3 使用库文件

 当连接器在库中找到了定义后,就将整个目标模块儿不仅仅是函数定义连接到可执行程序(仅仅是库中包含所需定义的目标模块加入链接)。

用户使用与库函数同名的函数,把带有这种函数的文件插入到库文件名列表之前,就能用他自己的函数取代库函数。这可能是一个bug,并且C++名字空间禁止这样做。

 连接器总是从标准库中查找程序中调用的经过编译的”标准”函数。

3编写第一个C++程序

3.2 名字空间

namespace关键字。

库或程序中的每一个C++定义集被封装在一个名字空间中,如果其他的定义有相同的名字,但它们在不同的名字空间,就不会产生冲突。

写程序之前,必须知道名字空间。如果只是简单地包含头文件,使用头文件中的一些函数或对象,编译时,可能会遇到一些奇怪的错误。虽然包含了头文件,但所有的声明都是在一个名字空间中,而没有告诉编译器我们想要用这个名字空间中的声明。

可以用一个关键字来声明:“我要私用这个名字空间中的声明和(或)定义”。这个关键字是”using”。所有的标准C++库都封装在一个名字空间中,即”std”(standard)。

#include <iostream.h>

相当于

#include <iostream>

using namespace std;

3.4 “HelloWorld

通过”<<”操作符把一系列的参数传递给cout对象。输入输出流参数endl表示一行结束并在行末加上一个换行符。C语言中,用双引号括起来的正文称为“字符串”(string),更精确的术语“字符数组”(character array).

在第一行以注释符(一般是”//”)跟一个冒号开始,而最后一行一“/:~”开始的注释,表示文件结束,这样的标记方便从代码文件中提取信息。

4关于输入输出流

4.1 字符数组的拼接

C预处理器可以进行字符数组的拼接(character array concatenation)。如果两个加进好的字符数组临街,并且他们之间没有标点,编译器就会把这些字符数组连接成单个字符数组。可用于代码列表行宽有限制时。

4.2 读取输入数据

用来完成标准输入功能的对象是cin(代表 “console input”,控制台输入)。Cin通常是指从控制台输入,但这种输入可以重定向来自其他输入源。

4.3 调用其他程序

system()函数在头文件<cstdlib>中声明。

字符串简介

字符数组,存放在内存中的一组字符,必须由程序员处理所有细节。

标准C++ string类就是设计用来处理(并隐藏)对字符数组的低级操作。

String类,包含在C++头文件<string>中,名字空间std,使用要用using 命令。

可以用”=”来给string对象赋值。连接string对象,只需用”+”操作符,”+”也可将string连接到字符数组中。如果想将string加到一个string或字符数组之后,可以用”+=”操作符完成这一操作。输入输出流知道如何处理string,可直接向cout发送string来打印它。

文件的读写

getline()包含在iostream库中,用它可以把一行读入到string对象中(换行符结束)。getline()的第一个参数是ifstream对象,从中读取内容,第二个参数是stream对象,返回值为bool类型。getline()逐行读取字符。

7 vector 简介

C++提供标准容器(container)类,容纳所有的各种对象。

vector类是一个模板(template),可有效地用于不同的类型。stringvector表示为vector<string>。为了在vector末尾后追加一个新元素,可以使用成员函数push_back()(对于一个具体的对象要用”.”号来调用它的成员函数)。

vector操作符重载可取回添加的元素,使vector像数组那样使用。即各元素大小相同且逐个相邻的情况下由“下标”(indexing)选定。

创建可以存放不同类型的vector,只需把类型当做模板参数(即在尖括号中的参数)输入。vector可以通过使用方括号的下标操作符向vector的任何一个单元赋值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值