总体预览
C++编程基础(Basic Programming)
(本章主要内容:内置的数据类型、语言预定义的运算符operator、标准库中的vector和string、条件语句和循环语句、输入和输出用的iostream库;vector和string是两个类,建议多用其取代语言内置的数组array和C-style字符串)
1.如何撰写c++程序
int main()
{
//程序内容
}
int为关键字,即程序语言预定义的有特殊意义的名称。
函数是一块独立的程序代码序列,执行一些序列。包含四部分:返回值类型,函数名,参数列表,函数体。
main函数返回整型,告诉调用者程序是否执行成功,正常时返回0;main不是程序语言定义的关键字,执行C++程序的编译系统会假设程序定义有main函数,否则程序无法执行。
数据的输入与输出,并非为C++程序语言定义本身定义的一部分,而是由C++的一套面向对象的类层次体系classes hierarchy提供支持,并作为C++标准库standard library的一员;面向对象的类层次体系定义了整个家族的各相关类型,例如终端与文件输入设备、输出设备等。
类,是用户自定义的数据类型;让我们得以将数据类型加入我们的程序中,并有能力识别它们;class机制赋予我们“增加程序内中类型抽象化层次”的能力,而不是简单的对基础数据类型思考;class的定义为两部分,分别写在不同地方,其中之一“头文件header file”,声明class所提供的各种操作行为,另一个为程序代码文件program text,包含了这些操作行为的实现内容;欲使用class,必须先在程序中包含其头文件。
基础数据类型:布尔值Boolean、字符character、整数integer、浮点数floating point。
C++标准的“输入/输出库”名为iostream,其中包含了相关的整套class,用以支持对终端和文件的输入与输出。
#include <iostream>
cout为已定义好的对象,将信息写到用户终端;output运算符(<<)可以将数据定向到cout。
cout << "Please enter your first name: ";
这行为C++所谓的语句statement,是C++程序最小独立单元。
读取用户输入内容,读取之前我们必须预先定义一个对象,用以储存数据。欲定义一个对象,必须指定其数据类型,再给定其标识符。若要储存某人的名字,int数据类型几乎不可能,更适当的数据类型是标准库中的string class。
#include <iostream>
#include <string>
string user_name;
cin >> user_name;
可以用换行字符常量‘\n’写至cout来换行;字符常量character literal系由一组单引号括住;字符常量分为两类,一类是可打印字符,另一类是不可打印字符。
在应用程序中定义了新的class时,也应该为每一个class提供它们自己的output运算符。这样可以让那些class的用户得以像面对内置类型一样地以相同方式输出对象内容。
using namespace std;
using和namespace都是C++中的关键字。std 是标准库所建的命名空间的名称。标准库所提供的任何事物(例如string class以及cout、cin这两个iostream类对象)都被封装在命名空间std内;命名空间是一种将库名称封装起来的方法。可以避免和应用程序发生命名冲突的问题。命名冲突是在应用程序内两个不同的实体entity具有相同名称,导致程序无法区分两者。命名冲突发生时,程序必须等到该命名冲突获得解析resolve之后,才得以继续执行。命名空间像是在众多名称的可见范围之间竖起的一道道围墙。若要在程序中使用string class以及cin、cout这两个iostream类对象,不仅需要包含头文件,还得让命名空间std内的名称曝光。上述代码即为最简单方法。
2.对象的定义与初始化
初始化
int num_tries = 0;
int num_tries(0);
第二种为构造函数语法,有两种初始化方法。第一种assignment运算符(=)进行初始化,这种方法沿袭自C语言,如果对象属于内置类型,或者对象可以单一加以初始化。第二种方法适用于对象需要多个初值,以标准库中的复数类为例,需要两个初值,于是引入了用来处理“多值初始化”的构造函数初始化语法constructor initialization syntax。
#include <complex>
complex<double> purei(0,7);
出现与complex之后的尖括号,表示complex是一个template class(模板类)。 template class允许我们在“不必指明data member类型”的情况下定义class;template class机制使程序员得以直到使用template class时才决定真正的数据类型。可以先插入一个代名,稍后才绑定至实际的数据类型。上述是将complex类的成员绑定至double类型。
输出中若包含转义字符,用‘//n’即可。
bool go_for_it = true;
若对象在执行过程中不应该有所变动,const关键字可以排上用场。如果企图为const对象指定新值