第一章 认识C++的对象

第一章 认识C++的对象

1.1 初识C++的函数和对象

一般称现实世界中客观存在的事物为对象。

1.混合型语言

C++程序以.cpp作为文件扩展名,并且必须有一个且只能有一个名为mian(不是C++的关键字)的主函数。真正的面向对象的语言没有主函数,C++保留了这个面向过程的主函数,所以称之为混合型语言。

2.灵活的注释方式

3.使用输出和输入对象

C++将数据从一个对象流向另一个对象的流动的抽象称为“流”。从流中获取数据的操作称为提取操作。向流中添加数据的操作称为插入操作。

cin用来处理标准输入,即键盘输入。cout用来处理标准输出,即屏幕输出。

4.使用命名空间

所谓命名空间(namespace)是一种将程序库名称封装起来的方法,它提高了程序的性能和可靠性。

C++新标准就是将标准类库中的头文件与一般的头文件(需要使用扩展名“.h”)区分开来。当然,也可以自己定义符合标准库的头文件,使用这种头文件时,也需要同时使用命名空间语句。

如果仍然使用C库中的头文件,则需要使用扩展名“.h”形式,例如<math.h><stdio.h>。如果使用C++提供的头文件,则不需要使用扩展名“.h”,例如,<string>。注意C++库中替代C库中的头文件的正确名称,例如可以使用<cmath>替代<math.h>

5.对象的定义及初始化

定义对象包括为它命名并赋予它数据类型。

6.函数原型及其返回值

函数都需要有类型说明。int main() 指出main是整数类型,返回值由return后面的表达式决定,且表达式的值必须与声明函数的类型一致。

C++使用变量的基本规则是:必须先声明,后使用,对函数调用也是如此。

7.const修饰符和预处理程序

C语言一般使用"#define"定义常量,在C++中,建议使用const代替宏定义。const是放在语句定义之前的,因此可以进行类型判别。

用关键字const修饰的标识符是一类特殊的常量,称为符号常量,或const变量。使用const允许编译器对其进行类型检查并可改善程序的可读性。

C++语言忍忍可以使用宏定义。无参数的宏作为常量,而参数的宏则可以提供比函数更高的效率。但预处理只是进行简单的文本代替而不进行语法检查,所以会存在一些问题。

因为被const修饰的变量的值在程序中不能被改变,所以在声明符号常量是,必须对符号常量进行初始化,除非这个变量使用extern修饰的外部变量。

C++语言预处理程序不是C++编译程序的一部分,它负责分析处理几种特殊的语句,这些语句被称为预处理语句。顾名思义,预处理程序对这几种特殊语句的分析处理是在编译程序的其他部分之前进行的。为了与一般的C++程序语句相区别,所有预处理语句都以位于行首的符号“#”开始。

预处理语句有3种,分别是宏定义、文件包含和条件编译。

预处理程序把所有出现的、被定义的名字全部替换成对应的“字符序列”。#define中的名字与C++中的标识符有相同的形式,为了区别,往往用大写字母来表示(标识符用小写字母),这也适合const语句。

文件引用使用双引号还是尖括号,其含义并不一样。采用尖括号引用系统提供的包含文件,C++编译系统将首先在C++系统设定的目录中寻找包含文件,如果没有找到,就到指定的目录中去寻找。采用双引号引用自己定义的包含文件(一般都放在自己定义的指定目录中),这将通知C++编译器在用户当前的目录下或指定的目录下寻找包含文件。指定的目录不必在同一个逻辑盘中。

8.程序运行结果

9.程序书写格式

1.2 认识C++语言面向过程编程的特点

C++语言的标准模板库(Standard Templete Library,STL)提供了与要操作的元素类型无关的算法,不仅使许多复杂问题迎刃而解,而且也将许多面向对象的程序设计问题转化成基于对象的面向过程编程。

1.2.1 使用函数重载

C++允许为一个函数定义几个版本,从而使一个函数名具有多种功能,这称为函数重载。

1.2.2 新的基本数据类型及其注意事项

void是无类型标识符,只能声明函数的返回值类型,不能声明变量。C++语言还比C语言多了bool(布尔)型。C++标准只限定intshort至少要有16位,而long至少32位,short不得长于intint不得长于long

地址运算符“&”用来取对象存储的首地址。

C++语言中的整数常量有4种类型:十进制常量、长整型常量、八进制常量和十六进制常量,并用前缀和后缀进行分类标识。

1.2.3 动态分配内存

在使用指针时,如果不使用对象地址初始化指针,可以自己给它分配地址。对于值存储一个基本类型数据的指针,申请的方式如下:

new 类型名[size]       //申请可以存储size个该数据类型的对象

不再使用时,简单地使用“delete指针名”即可释放已经申请的存储空间。

1.2.4 引用

别名的地址就是原来对象的地址,选定命名时使用“引用”运算符“&”,再选用数据类型与之配合。引用的声明方式如下:

数据类型别名=对象名;

所谓“引用”就是将一个新标识符和一块已经存在的存储区域相关联。因此,使用引用时没有分配新的存储区域,它本身并不是新的数据类型。

引用通常用于函数的参数表中或者作为函数的返回值。对引用实质性的理解应抓住如下两点:

(1)引用实际上就是变量的别名,使用引用就如同直接使用变量一样。引用与变量名在使用的形式上是完全一样的,引用只是作为一种标识对象的手段,不能直接声明对数组的引用,也不能声明引用的引用。

(2)引用的作用与指针有相似之处,它会对内存地址上存在的变量进行修改,但它不占用新的地址,从而节省开销。

1.2.5 对指针使用const限定符

可以用const限定符强制改变访问权限。

1.左值和右值

左值是指某个对象的表达式。

2.指向常量的指针

指向常量的指针是在非常量指针声明前面使用const,例如:

const int *p;

它告诉编译器,“*p”是常量,不能将“*p”作为左值进行操作,即限定了“*p=”的操作,所以称为指向常量的指针。

3.常量指针

const限定符放在*号的右边,是使指针本身称为一个const指针。

int x=5;

int * const p=&x

不能改变p的指向,但可以通过间接引用运算符“*”改变其值,例如语句“*p=56;”将上面的x的值改变为56

4.指向常量的常量指针

也可以声明指针和指向的对象都不能改动的“指向常量的常量指针”,这时必须要初始化指针。例如:

int x=2;

const int * const p=&x;

告诉编译时,*pp都是常量,都不能作为左值。

1.2.6 泛型算法应用于普通数组

所谓泛型算法,就是提供的操作与元素的类型无关。

1.2.7 数据的简单输入输出格式

C++提供了两种格式控制方式:一种是使用iso _base类提供的接口;另一种是使用一种称为操控符的特殊函数,它的特点是可直接包含在输出和输入的表达式中,因此更为方便,不带形式参数的操控符定义在头文件<iostream>中,带形式参数的操控符定义在头文件<iomanip>中。使用它们时,一是要正确包含它们,二是只有与符号“<<”或“>>”连接时才起作用,三是无参数的操控符函数不能带有“()”号。

1.3 程序的编辑、编译和运行的基本概念

C++语言写成的程序称为源程序,源程序必须经过C++编译程序翻译成机器语言才能执行。要得到一个用C++语言设计的、名为myapp.exe的可执行文件,其过程可分为如下几步:

(1)先使用编辑器编辑一个C++程序mycpp.cpp,又称其为C++的源程序。

(2)然后使用C++编译器对这个C++程序进行编译,产生文件mycpp.obj

(3)再使用连接程序(又称Link),将mycpp.obj变成mycpp.exe

所谓集成环境,就是将C++语言的编辑、编译、连接和运行程序都集成到一个综合环境中。

你可能感兴趣的:(C++)