您的位置:首页 > 编程语言 > C语言/C++

C++基础知识学习整理一

2013-12-18 10:24 399 查看
如果每一行代码以反斜杠 inverted slash (\)结束,字符串常量可以分多行代码表示:

"string expressed in \
two lines"
如果我们想让字符串使用宽字符(wchar_t),而不是窄字符(char),可以在常量的前面加前缀 L:
L"This is a wide character string"宽字符通常用来存储非英语字符,比如中文字符,一个字符占两个字节。
布尔型常量(Boolean Literals)
布尔型只有两个有效的值:true 和 false,其数据类型为 bool。
在 ANSI-C++标准出现之前的许多编译器中,就像 C 语言中,关系运算并不返回值为真 true 或假 false 的 bool 值,而是返回一个整型数值最为结果,它的数值可以为 0,代表"false"或一个非 0 数值(通常为 1)来代表"true"。
逗号运算符 (,)
逗号运算符 (,) 用来分开多个表达式,并只取最右边的表达式的值返回。
例如有以下代码:a = (b=3, b+2);
这行代码首先将 3 赋值给变量 b,然后将 b+2 赋值给变量 a。所以最后变量 a 的值为 5,而变量 b 的值为 3。

位运算符 Bitwise Operators ( &, |, ^, ~, <<, >> )位运算符以比特位改写变量存储的数值,也就是改写变量值的二进制表示:
op
asm
Description
&
AND
逻辑与
Logic AND
|
OR
逻辑或
Logic OR
^
XOR
逻辑异或
Logical exclusive OR
~
NOT

1 取补(位反转)Complement to one (bit inversion)
<<
SHL
左移
Shift Left
>>
SHR
右移
Shift Right
sizeof()
这个运算符接受一个输入参数,该参数可以是一个变量类型或一个变量自己,返回该变量类型(variable type) 或对象(object)所占的字节数:
a = sizeof (char);
这将会返回 1 给 a,因为 char 是一个常为 1 个字节的变量类型。sizeof 返回的值是一个常数,因此它总是在程序执行前就被固定了。

运算符<<又叫插入运算符(insertion operator) 因为它将后面所跟的数据插入到它前面的数据流中。在以上的例子中,字符串常量 Output sentence,数字常量 120 和变量 x先后被插入输出流 cout 中。注意第一句中字符串常量是被双引号引起来的。每当我们使用字符串常量的时候,必须用引号把字符串引起来,以便将它和变量名明显的区分开来。例如,下面两个语句是不同的:
cout << "Hello"; // 打印字符串 Hello 到屏幕上
cout << Hello; // 把变量 Hello 存储的内容打印到屏幕上
必须注意,除非我们明确指定,cout 并不会自动在其输出内容的末尾加换行符,因此下面的语句:cout << "This is a sentence.";
cout << "This is another sentence.";
将会有如下内容输出到屏幕:
This is a sentence.This is another sentence.
虽然我们分别调用了两次 cout,两个句子还是被输出在同一行。所以,为了在输出中换行,我们必须插入一个换行符来明确表达这一要求。在 C++中换行符可以写作\n:
cout << "First sentence.\n ";
cout << "Second sentence.\nThird sentence.";将会产生如下输出:
First sentence.
Second sentence.
Third sentence.
另外,你也可以用操作符 endl 来换行,例如:cout << "First sentence." << endl;
cout << "Second sentence." << endl;
将会输出:First sentence.
Second sentence.
当操作符endl被用在bufferedstreams中时有一点特殊:它们被flushed。不过cout 默认为 unbuffered,所以不会被影响。 你可以暂时不管这一点。
你可以使用\n 或 endl 来指定 cout 输出换行,请注意前面所讲的两者的不同用法。
输入 Input (cin)
C++中的标准输入是通过在 cin 数据流上重载运算符 extraction (>>) 来实现的。它后面必须跟一个变量以便存储读入的数据。例如:
int age;
cin >> age;
声明一个整型变量 age 然后等待用户从键盘输入到 cin 并将输入值存储在这个变量中。
cin 只能在键盘输入回车键(RETURN)后才能处理前面输入的内容。因此即使你只要求输入一个单独的字符,在用户按下回车键(RETURN)之前 cin 将不会处理用户的输入的字符。
在使用 cin 输入的时候必须考虑后面的变量类型。如果你要求输入一个整数,extraction(>>) 后面必须跟一个整型变量,如果要求一个字符,后面必须跟一个字符型变量,如果要求一个字符串,后面必须跟一个字符串型变量。
你也可以利用 cin 要求用户输入多个数据 :cin >> a >> b;
等同于:
cin >> a;
cin >> b;
在以上两种情况下用户都必须输入两个数据,一个给变量 a,一个给变量 b。输入时两个变量之间可以以任何有效的空白符号间隔,包括空格,跳跃符 tab 或换行。
cin 和字符串
我们可以像读取基本类型数据一样,使用 cin 和>>操作符来读取字符串,例如:cin >> mystring;
但是,cin >> 只能读取一个单词,一旦碰到任何空格,读取操作就会停止。在很多时候这并不是我们想要的操作,比如我们希望用户输入一个英文句子,那么这种方法就无法读取完整的句子,因为一定会遇到空格。
要一次读取一整行输入,需要使用 C++的函数 getline,相对于是用 cin,我们更建议使用 getline 来读取用户输入。
例如:
// 读取字符串例子 #include <iostream>
#include <string>
using namespace std;
int main (){ string mystr;
cout << "What's your name? ";
getline (cin, mystr);
cout << "Hello " << mystr << ".\n";
cout << "What is your favorite color? ";
getline (cin, mystr);
cout << "I like " << mystr << " too!\n";
return 0;
}
What's your name? Aqua
Hello Aqua.
What is your favorite
color? blue
I like blue too!
你可能注意到在上面的例子中,两次调用 getline 函数我们都是用了同一个字符串变量(mystr)。在第二次调用的时候,程序会自动用第二次输入的内容取代以前的内容。

字符串流 (stringstream)
标准头文件 <sstream> 定义了一个叫做 stringstream 的类,使用这个类可以对基于字符串的对象进行像流(stream)一样的操作。这样,我们可以对字符串进行抽取和插入操作,这对将字符串与数值互相转换非常有用。例如,如果我们想将一个字符串转换为一个整数,可以这样写:string mystr ("1204");
int myint;
stringstream(mystr) >> myint;
这个例子中先定义了一个字符串类型的对象 mystr,初始值为"1204",又定义了一个整
数变量 myint。然后我们使用 stringstream 类的构造函数定义了这个类的对象,并以
字符串变量 mystr 为参数。因为我们可以像使用流一样使用 stringstream 的对象,所
以我们可以像使用 cin 那样使用操作符 >> 后面跟一个整数变量来进行提取整数
a9d3
数据。这段代码执行之后变量 myint 存储的是数值 1204 。

我们也可以在 for 循环初始化或增值域中放一条以上的语句,中间用逗号 coma(,)隔开。例如假设我们想在循环中初始化一个以上的变量,可以用以下的程序来实现:
for ( n=0, i=100 ; n!=i ; n++, i-- ){
// whatever here...
}
这个循环将被执行 50 次,如果 n 和 i 在循还内部都不被改变的话:
n 初始值为 0,i 初始值为 100,条件是(n!=i)(即 n 不能等于 i)。因为每次循环 n 加 1,而且 i 减 1,循环的条件将会在第 50 次循环之后变为假 false(n 和 i 都等于 50)。
void 还可以被用在函数参数位置,表示我们明确希望这个函数在被调用时不需要任何参数。例如上面的函数 printmessage 也可以写为以下形式:void printmessage (void)
{
cout << "I'm a function!";
}
虽然在 C++ 中 void 可以被省略,我们还是建议写出 void,以便明确指出函数不需要参数。
你必须时刻知道的是调用一个函数时要写出它的名字并把参数写在后面的括号内。但如果函数不需要参数,后面的括号并不能省略。因此调用函数 printmessage 的格式是printmessage();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息