已有的知识就不再提,之前学习过一点C,迷迷糊糊,自以为还不错,实际上什么也写不出来,就是会点语法的基础。出于某些C++的特殊用途,不得不学习C++,因为有预感,以后可能要靠他来赚钱,哈哈,太势力了不好。
2017-1-20 16:45:24

1.所有我们要使用的变量都必须事先声明过。
C和C++语言的一个重要区别是,在C++语言中我们可以在源程序中任何地方声明变量,甚至可以在两个可执行(excutable)语句的中间声明变量,而不象在C语言中变量声明只能在程序的开头部分。然而,我们还是建议在一定程度上遵循C语言的习惯来声明变量,因为将变量声明放在一处对debug程序有好处。因此,传统的C语言方式的变量声明就是把变量声明放在每一个函数(function)的开头(对本地变量local variable)或直接放在程序开头所有函数(function)的外面(对全局变量global variable)。 一个变量可以是本地(local)范围内有效,叫做本地变量,也可以是全局(global)范围内有效,叫做全局变量。全局变量要定义在一个源码文件的主体中,所有函数(包括主函数main())之外。而本地变量定义在一个函数甚至只是一个语句块单元中。 除本地和全局范围外,还有一种外部范围,它使得一个变量不仅在同一源程序文件中可见,而且在其他所有将被链接在一起的源文件中均可见。

2.Initialization of variables

(1)第一种,又叫做类C (c-like) 方法,是在声明变量的时候加上一个等于号,并在后面跟上想要的数值,
type identifier = initial_value ;
int a = 0;
(2)第二种,构造函数(constructor)初始化, 是将初始值用小括号(parenthesis ())括起来,
type identifier (initial_value) ;
int a(0);

思考:两者真的完全一致么?

3.C++提供一个string类来支持字符串的操作,它不是一个基本的数据类型,但是在一般的使用中与基本数据类型非常相似。

#include <iostream>
#include <string>
using namespace std;

int main ()
{
string mystring = "This is a string";
//string mystring ("This is a string");
//string mystring; mystring = "This is the initial string content";
cout << mystring;
return 0;
}

4.常量 (Constants )
字是用来在程序源码中表达特定的值。字常量(literal constant)可以被分为整数(Integer Numbers), 浮点数(Floating-Point Numbers),字符(Characters)和字符串(Strings)。

例如以下字常量(literal constants)互相等值:

75     // 十进制 decimal
0113 // 八进制 octal
0x4b // 十六进制 hexadecimal

75 // int
75u // unsigned int
75l // long
75ul // unsigned long

这里后缀u和l可以是大写,也可以是小写。

3.14159 // 3.14159
6.02e23 // 6.02 x 10^1023
1.6e-19 // 1.6 x 10^-19
3.0 // 3.0

3.14159L // long double
6.02e23f // float

'z'
"Hello world"

字符常量和字符串常量各有特点,例如escape codes,这些是除此之外无法在源程序中表示的特殊的字符,例如换行符 newline (\n) 或跳跃符tab (\t)。所有这些符号前面要加一个反斜杠inverted slash ()。
另外你可以数字ASCII 码表示一个字符,这种表示方式是在反斜杠()之后加以8进制数或十六进制数表示的ASCII 码。在第一种(八进制octal)表示中,数字必需紧跟反斜杠(例如\23或\40),第二种(十六进制hexacedimal),必须在数字之前写一个x字符(例如\x20或\x4A)。
如果每一行代码以反斜杠inverted slash ()结束,字符串常量可以分多行代码表示

"string expressed in \
two lines"

#include<iostream>
using namespace std;
int main()
{
printf("we form " "a single " "string " "of characters ");
return 0;
}
//"we form a single string of characters " was output.

最后如果我们想让字符串使用宽字符(wchar_t),而不是窄字符(char),可以在常量的前面加前缀L:

L"This is a wide character string"

宽字符通常用来存储非英语字符,比如中文字符,一个字符占两个字节。

5.使用预处理器指令#define,你可以将那些你经常使用的常量定义为你自己取的名字而不需要借助于变量。它的格式是:

#define identifier value

实际上编译器在遇到#define指令的时候做的只是把任何出现这些 常量名(在前面的例子中为PI, NEWLINE或WIDTH)的地方替换成他们被定义为的代码(分别为3.14159265, '\n'和100).#define定义的常量被称为宏常量macro constants。#define指令不是代码语句,它是预处理器指令,因此指令行末尾不需要加分号semicolon (;) 。如果你在宏定义行末尾加了分号(;) ,当预处理器在程序中做常量替换的时候,分号也会被加到被替换的行中,这样可能导致错误。

6.声明常量declared constants (const)

通过使用const前缀,你可以定义指定类型的常量,就像定义一个变量一样:

const int width = 100;
const char tab = '\t';
const zip = 12440;

如果没有指定类型(如上面最后例子中最后一行),编译器会假设常量为整型int。

C++ const 允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的。如果在编程中确实有某个值保持不变,就应该明确使用const,这样可以获得编译器的帮助。

7.sizeof()

这个运算符接受一个输入参数,该参数可以是一个变量类型或一个变量自己,返回该变量类型(variable type) 或对象(object)所占的字节数:

a = sizeof (char);

8.在C++的iostream函数库中,一个程序的标准输入输出操作依靠两种数据流:cin 给输入使用和cout给输出使用。另外,cerr和clog也已经被实现――它们是两种特殊设计的数据流专门用来显示出错信息。它们可以被重新定向到标准输出设备或到一个日志文件(log file)。因此cout (标准输出流)通常被定向到屏幕,而cin (标准输入流)通常被定向到键盘。

cout << "Hello"; // 打印字符串Hello到屏幕上
cout << Hello; // 把变量Hello存储的内容打印到屏幕上
cout << "Hello, " << "I am " << "a C++ sentence";
cout << "Hello, I am " << age << " years old and my zipcode is " << zipcode;
cout << "First sentence.\n ";
cout << "First sentence." << endl;

当操作符endl被用在buffered streams中时有一点特殊:它们被flushed。不过cout 默认为unbuffered,所以不会被影响。可以暂时不管这一点。可以使用\n或endl来指定cout输出换行。

9.在使用cin输入的时候必须考虑后面的变量类型。如果你要求输入一个整数,extraction (>>) 后面必须跟一个整型变量,如果要求一个字符,后面必须跟一个字符型变量,如果要求一个字符串,后面必须跟一个字符串型变量。
可以利用cin 要求用户输入多个数据 :

cin >> a >> b;

等同于:

cin >> a;
cin >> b;

在以上两种情况下用户都必须输入两个数据,一个给变量a,一个给变量b。输入时两个变量之间可以以任何有效的空白符号间隔,包括空格,跳跃符tab或换行。

10.cin >> 只能读取一个单词,一旦碰到任何空格,读取操作就会停止。

希望用户输入一个英文句子,那么这种方法就无法读取完整的句子,因为一定会遇到空格。

要一次读取一整行输入,需要使用C++的函数 getline,相对于是用cin,更建议使用getline来读取用户输入。

string mystr;
cout << "What's your name? ";
getline (cin, mystr);//cin >> mystr

11.标准头文件

string mystr ("1204");//先定义了一个字符串类型的对象mystr,初始值为"1204"
int myint;//定义了一个整数变量myint
stringstream(mystr) >> myint;//使用 stringstream 类的构造函数定义了这个类的对象,并以字符串变量mystr为参数

可以像使用流一样使用stringstream 的对象,所以我们可以像使用cin那样使用操作符 >> 后面跟一个整数变量来进行提取整数数据。这段代码执行之后变量 myint 存储的是数值 1204 。

12.if, while, do...while..., for, break, continue; switch...case...default...,

13.exit

exit是一个在cstdlib (stdlib.h)库中定义的函数。
exit的目的是一个特定的退出代码来结束程序的运行,它的原型(prototype)是:

void exit (int exit code);

exit code是由操作系统使用或被调用程序使用。通常exit code为0表示程序正常结束,任何其他值表示程序执行过程中出现了错误。

14.void

在C++ 中void可以被省略,建议写出void,以便明确指出函数不需要参数。
必须时刻知道的是调用一个函数时要写出它的名字并把参数写在后面的括号内。但如果函数不需要参数,后面的括号并不能省略。因此调用函数 printmessage 的格式是

printmessage();//void printmessage(void);

15.参数按数值传递和按地址传递(Arguments passed by value and by reference)

#include <iostream.h>
void prevnext (int x, int& prev, int& next)
{
prev = x-1;
next = x+1;
}

int main ()
{
int x=100, y, z;
prevnext (x, y, z);
cout << "Previous=" << y << ", Next=" << z;
return 0;
}

这种用地址符 ampersand (&)来声明按地址"by reference"传递参数的方式只是在C++中适用。在C 语言中,必须用指针(pointers)来做相同的操作。

16.默认参数
有默认值的放在参数列表后面。
int divide (int a, int b=2)(...)