10878
备注:
|
← 于2008-05-08 15:49:46修订的的版本12 ⇥
11797
|
删除的内容标记成这样。 | 加入的内容标记成这样。 |
行号 72: | 行号 72: |
<<Include(C++:注释, "注释", 2)>> <<Include(C++:名字空间, "名字空间", 2)>> |
== 注释 == 参见:[[C++:注释]] == 名字空间 == 参见:[[C++:名字空间]] |
行号 262: | 行号 264: |
<<Include(C++:强制类型转换, "强制类型转换", 2)>> <<Include(C++:bool类型,"bool类型",2)>> |
== 强制类型转换 == 参见:[[C++:强制类型转换]] |
行号 356: | 行号 357: |
= C++中的一些新类型 = == bool类型 == [[C++:bool类型]] |
|
行号 427: | 行号 434: |
int main() { vector<int> array(10); int i = 0; int x; while(1) { cin >> x; if( x == 0) break; array[i++] = x; } } }}} 但是上面这个程序和C语言的版本一样,由于vector的大小是一开始就确定的,所以还是有可能发生数组溢出。我们可以进一步改写: {{{#!cplusplus #include <iostream> #include <vector> using namespace std; |
|
行号 435: | 行号 459: |
array.append(x); | array.push_back(x); |
行号 441: | 行号 465: |
此处,array的大小是动态变化的,一开始是0,随着append不断的增大。 | |
行号 443: | 行号 468: |
将内容写到一个文件: | |
行号 445: | 行号 471: |
#include <iostream> | |
行号 459: | 行号 486: |
= The End = | 从某个文件读数据: {{{#!cplusplus #include <fstream> #include <iostream> #include <ctype.h> using namespace std; int main() { char c; ifstream infile("in.txt"); ofstream outfile("out.txt"); while(infile >> c) { outfile << toupper(c); } } }}} ------ CategoryCpp |
C++编程基础
1. 简单的C++程序实例
1.1. 第一个C++程序 输出Hello world
1.2. 第1.5个C++程序 输入名字,输出招呼
1.3. 第二个C++程序 求两数之和
1.4. 第三个C++程序 求两个数中较大的一个
2. 注释
参见:C++:注释
3. 名字空间
参见:C++:名字空间
4. C++的头文件
C语言中的标准头文件有.h,在C++中仍然可以使用
C语言的头文件在C++中有另一种方式:前面加c后面去掉.h
C++中增加的标准头文件没有.h
所有C++中新增的标准库,都放在名字空间std中。比如
使用.h头文件包含的C语言标准库不在std名字空间中
使用没有.h的头文件包含的C语言库,在std名字空间中
5. C++输入输出
- C语言输入输出(printf/scanf)在C++中仍然可以使用
- C++输入输出新增了一种输入输出方式,它更容易使用、可扩展输入输出系统,不需要格式化串。它包括:
- C++流:cin, cout , cerr
C++输入输出操作符:<<和>>
用法:
更多例子:
格式控制:使用操纵符
- 输出控制:
- 控制进制dec, hex, oct
- 刷新流endl, flush
- 对齐left, right
- 精度setprecision(n)
- 宽度setw(n)
- 输入控制:
- 跳过空格skipws
- 读取空白ws
例子:
如果最后一句改为这样,输出会怎样?
cout << "i = " << i << " (hexadecimal)\n";
注意:不要同时使用C和C++输入输出库
6. 定义常量
C语言定义常量的办法
这种宏定义的方法容易带来一些错误。
在C++中新增的了代替宏的一些语法。包括C++定义常量的办法:
const变量必须在定义时初始化,不能赋值
注:const在C语言中也可以使用,但是C++中对const的用法作了扩充。
用const修饰指针的时候,可以放在指针定义的两个不同位置:
7. 强制类型转换
参见:C++:强制类型转换
8. 定义变量
C语言只能在一个语句块开始的地方定义变量
而在C++中没有这样的没有限制,而且还可以在for初始化部分定义变量。比如
9. 结构体
定义结构体变量时可以省略关键字struct
struct point { double x, y; }; struct point p1; // C/C++ point p2; // C++
此外,C++的结构体内部可以包含函数,这样的结构体就变成了类。在后面会详细介绍。
10. C++内存分配
C++中可以使用C语言内存分配malloc/free/realloc/calloc等,最常用的是malloc和free。
C++中还可以用特有的内存分配方法:new/delete。比如:
注意:
- new和delete是两个新增的关键字,他们也是两个运算符。
malloc分配的内存只能用free来释放,new分配的内存只能用delete来释放,new []分配的内存只能用delete []来释放。比如:
注意:
- delete一次只能删除一次new的空间
C++中的一些新类型
1. bool类型
2. string类型
在C语言中,用char* 和char[ ]表示字符串。用string.h头文件中定义的strlen, strcpy, strcat, strstr等函数来对字符串进行操作。
C语言的字符串的缺点是内存需要手动管理,容易出错。比如
为避免使用字符串的麻烦和潜在的错误,在C++中,用string类来存放和操作字符串。它定义在string头文件中。
1 #include <string>
2 using namespace std;
3 int main() {
4 string s1; //s1默认初始化为 ""
5 string s2 = "Bravo"; //s2初始化为"Bravo"
6 string s3 = s2; //s3初始化和s2一样
7 string s4 (10, 'x'); //s4初始化为10个x组成的字符串
8 s1 = "Bravo"; //s1的值赋为"Bravo"
9 cout << s1 << s1.length() << endl; //输出字符串s1,并输出它的长度
10 cout << s1[0]; //取字符串s1中一个字符
11 cin >> s1; //输入一个字符串,以空白符(white space)为界
12 s3 = s1 + s2; //把s1和s2连接成一个字符串并赋值给s3
13 }
3. vector向量
在c语言中表示多个相同的东西,使用数组,比如:
但是C语言中的数组存在的问题是:
- 数组的大小是编译时确定的,不能动态变化;
- 对数组的下标没有越界检查,常常导致内存错误。
在C++中可以使用vector代替数组。
但是上面这个程序和C语言的版本一样,由于vector的大小是一开始就确定的,所以还是有可能发生数组溢出。我们可以进一步改写:
此处,array的大小是动态变化的,一开始是0,随着append不断的增大。
4. 文件
将内容写到一个文件:
从某个文件读数据: