如果已经使用过C语言进行编程,则看到 cout 函数时可能会小吃一惊。事实上,C++能够使用 printf(),scanf ()和其他所有标准C输入和输出函数,只需要包含常规C语言的 stdio.h 文件。
接下来看一个简单的 C++ 程序
// myfirst.cpp -- displays a message #include// a PREPROCESSOR directive int main() // funtion header { using namespace std; cout << "Come up and C++ me some time."; cout << endl; return 0; //terminate main() }
示例包含下述元素:
(1) 注释,由前缀 // 标识
(2) 预处理器编译指令 #include
(3) 函数头 int main ()
(4) 编译指令 using namespace
(5) 函数题,用 { } 括起
(6) 使用 C++ 的cout 工具 显示消息的语句
(7) 结束 main()函数的 return 语句
main () 函数 : int main () // 函数头
{ // 函数体
statement;
return 0 ;
}
这几行代码构成了函数定义(function definition),函数头对函数与程序其他部分之间的接口进行了总结。所有的语句都以 ; 结束
常规的独立程序都要包含一个 main()函数 ,但存在一些例外情况,如机器人中的控制器芯片可能不需要main()。
C++ 预处理器和iostream 头文件
预处理器,即它处理名称以 # 开头的编译指令,不必执行任何特殊操作来调用该预处理器,它在编译程序会自动运行。
预处理器将 iostream 文件的内容添加到程序中。这是一种典型的预处理器操作:在源程序代码被编译之前,替换或添加文本。
iostream 中的 io 指的是输入(进入程序的信息)和输出(从程序发送出的信息),实际上,iostream 文件的内容将取代程序中的代码行 #include
像 iostream 这样的文件叫头文件(包含文件)。
using namespace std ;这是一种偷懒的做法,在大型项目中是一个潜在问题。
该编译指令使得 std 名称空间中的所有名称都可以使用。若没有该编译指令,例如在使用cout 和 endl 时,需要这么写:
using std :: cout; using std :: endl;
让程序能够访问名称空间 std 的方法有多种,这是最主要的四种:
(1)将 using namespace std ;放在函数定义之前,让文件中所有的函数能够使用名称空间 std中所有的元素。
(2)将 using namespace std ;放在特定的函数定义中,让该函数能够使用名称空间 std 中的所有元素。
(3)在特定的函数中使用类似 using std :: cout 这样的编译指令,而不是 using namespace std ; ,让该函数能够使用指定的元素,如 cout 。
(4)完全不使用编译指令 using 。
使用 cout 进行 C++ 输出 (cout是一个 流的对象)cout << "Come up and C++ me some time."; // 双括号括起的部分是要打印的消息。双括号括起的一系列字符叫做字符串。 // << 符号表示将该语句发送给cout ;该符号指出了信息流动的路径。使用 cin 进行 C++ 输入 (cin 也是一个 流的对象)
看一个示例:
// inout and output #include使用 cout 进行拼接int main() { using namespace std; int carrots; cin >> carrots; carrots+=2000; cout << "Happy new " << carrots << "year !" << endl; return 0; }
cout << "Happy new " << carrots << "year !" << endl;
// 也可以这么写
cout << "Happy new "
<< carrots
<< "year !"
<< endl;
声明语句与变量,和C语言相同,略。
类简介类是用户定义的一种数据类型。要定义类,需要描述它能够表示什么信息和可对数据执行哪些操作。
类之于对象 就像 类型之于变量。 也就是说,类描述的是数据格式及其用法,而对象则是根据数据格式规范创建实体。
现在来看 cout ,它是一个 ostream 类对象。 ostream类定义描述了ostream对象表示的数据以及可以对它执行的操作,如将数字或字符串插入到输出流当中。同样,cin 是一个 istream 类对象。
第二章 处理数据为把信息存储在计算机中,程序必须记录三个基本属性:
信息将存储在哪里;
要存储什么值;
存储何种类型的信息;
变量 整型:wchar_t , char , short , int , long 和 long longshort:至少 16 bit .
int 至少和short 一样长 .
long 至少 32 bit,且至少与 int 一样长.
long long 至少 64 bit ,且至少与 long 一样长.
(要创建无符号版本的基本整型,只需要使用关键字unsigned ,例如 :unsigned long askd)
变量使用的 bit越多,占用的内存空间就越大。运算符 sizeof 可用来显示变量的字节数。
wchar_t与 char 相比 8 位 char 可以表示基本字符集,wchar_t( 宽字符类型)可以表示扩展字符集。
cin 和 cout 将输入和输出看作是 char 流,因此不适用于处理 wchar_t 类型,iostream的最新版本提供了—— wcin 和 wcout ,用于处理wchar_t 流。
另外,,可以通过加上前缀 " L " 来指示宽字符常量和宽字符串。
// 将字母 P 的 wchar_t 版本存储到变量bob // 并显示单词tall 的 wchar_t 版本 wchar_t bob = L'P'; wcout << L"tall"<< endl;浮点数 :float,double ,long double
与C类似,这里只介绍 E表示法 。
如 3.45E6 表示 3450000,E6代表前面的浮点数乘以 6 个 10.
E 后面的数字是指数,可正可负。
bool 类型与C语言 相同,略。
初始化初始化将声明与赋值结合在一起。 如果不对函数内部定义的变量进行初始化,那该变量的值将是不确定的。这意味着该变量的值将是它被创建之前,相应内存单元保存的值。
符号常量——预处理器方式
#define MAXN 100
该编译指令告诉预处理器:在程序中查找 MAXN ,并将所有的 MAXN 都替换成 100.
预处理器会查找独立的标记(单独的单词),像 : PPTDMAXN 不会被替换为 100.
const 限定符与 #define语句 相比,用 const 关键字来修改变量声明和初始化更好。
// 假设需要一个表示一年中月份数的符号常量 const int Months = 12;
这样,Months的值就被固定了,不允许修改。
第三章 复合类型 数组(array)存储多个同类型的值。 C++ 数组从下标 ' 0 ' 开始编号。
有效下标值的重要性
编译器不会检查使用的下标是否有效。例如将一个值赋给一个不存在的元素 a[ 101 ] ,可能引发一系列问题,可能破坏数据或代码,导致程序异常终止。
初始化数组时,提供的值可以少于数组的元素数目,其他的元素将被编译器设置为0.
字符串
C++ 处理字符串的方式有两种,第一种被称为C风格字符串,它具有特殊的性质:以空字符结尾,空字符被写作 , 其ASCII码为0 ,用来标记字符串结尾。
char a[4] = {'a','b','c','d'} // not a string
char b[4] = {'a','b','c',' '} // a string
有一种更为简便的方法:
char a[4] = "abcd" // the is understood char b[4] = "abc"
这种字符串被称为字符串常量或字符串面值。
注意:在确定存储字符串所需的最短数组时,别忘了给结尾的空字符留个位置。
注意:字符串常量(使用双引号)不能与字符常量(使用单引号)互换 。例如一个字符常量 ' S ' 是字符串编码的简写表示。在ASCII 系统上,' S ' ,只是83的另一种写法,因此,下面语句将83 赋给size:
char size = 'S' // This is fine
但 " S " 不是字符常量,它表示的是两个字符(字符S和 )组成的字符串。更糟糕的是,"S" 实际上表示的是字符串所在内存地址 ,下面语句试图将内存地址赋值给size:
char size = "S" // illegal type mismatch
由于地址是一种独立的类型,因此C++ 编译器不允许这种不合理的做法。
在数组中使用字符串先看一个示例:
// storing strings in an array #include#include int main() { using namespace std; const int Size = 15; char name1[Size]; char name2[Size] = "C++owboy"; cout << "Howby! I am" << name2; cout << "! What is your name?n"; cin >> name1; cout << "Well, "<


