C++学习笔记
数据类型
基本数据类型
C++ 为程序员提供了种类丰富的内置数据类型和用户自定义的数据类型。下表列出了七种基本的 C++ 数据类型:
类型 | 关键字 |
---|---|
布尔型 | bool |
字符型 | char |
整型 | int |
浮点型 | float |
双浮点型 | double |
无类型 | void |
宽字符型 | wchar_t |
使用numeric_limits
可以查看数据类型的极限值:
cout << "unsigned int 最大值:" << (numeric_limits<unsigned int>::max)();
typedef 声明
您可以使用 typedef 为一个已有的类型取一个新的名字。下面是使用 typedef 定义一个新类型的语法:
typedef int feet;
Byte和char
char是用来表示一个字符,而不是一个字,因为一个字要占用两个字节。而存储一个ANSI字符只需一个字节。注意,强调是ANSI字符,而不是Unicode字符。因为Unicode要占用两个字节。(这个一定要注意看)如,"中文123"(占10字节)。
byte类型是最自由的一种。它就占用一个字节,但没有定义这个字节拿来干什么。Byte定义为一个Unsigned char类型。也就是无符号的一个字节。它将一个字节的8位全占用了。可以表示的数据范围是0到255之间。
字符串
C++ 提供了以下两种类型的字符串表示形式:
- C 风格字符串
- C++ 引入的 string 类类型
C 风格字符串
char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
char greeting[] = "Hello";
C++ String 类
string str1 = "Hello";
更多 String 用法请参考: http://www.purethought.cn/5cf35ca9.html
指针
什么是指针?
首先要理解 值(变量,常量,函数等) 是存储在内存中的,指针指向 值 的地址.
那么指针如何正确引用一个值呢,这就需要声明指针的类型,如 int 型指针,这就告诉指针,从指向的内存地址开始读取 int 大小的内存,就正确解析 值 了.
即,指针代表了变量的首地址,指针类型代表了有效范围.
#include <iostream>
using namespace std;
int main ()
{
int var = 20; // 实际变量的声明
int *ip; // 指针变量的声明
ip = &var; // 在指针变量中存储 var 的地址
cout << "Value of var variable: ";
cout << var << endl;
// 输出在指针变量中存储的地址
cout << "Address stored in ip variable: ";
cout << ip << endl;
// 访问指针中地址的值
cout << "Value of *ip variable: ";
cout << *ip << endl;
return 0;
}
Value of var variable: 20
Address stored in ip variable: 0xbfc601ac
Value of *ip variable: 20
引用
引用(&)
又叫别名,即引用和原变量是同一个值的不同叫法(不同表示方法,类似typedef),当使用引用或原变量名更改值时,相应的原变量名或引用所代表的值也就变更了.
#include <iostream>
using namespace std;
int main ()
{
// 声明简单的变量
int i;
double d;
// 声明引用变量
int& r = i;
double& s = d;
i = 5;
cout << "Value of i : " << i << endl;
cout << "Value of i reference : " << r << endl;
d = 11.7;
cout << "Value of d : " << d << endl;
cout << "Value of d reference : " << s << endl;
return 0;
}
Value of i : 5
Value of i reference : 5
Value of d : 11.7
Value of d reference : 11.7
函数
函数是一个可传参,可返回值的代码块.
函数由一个函数签名来表示:
返回值类型, 函数名, 参数类型
使用函数
使用函数时,先声明函数,再调用函数.
#include <iostream>
using namespace std;
// 函数声明
int max(int num1, int num2);
int main ()
{
// 局部变量声明
int a = 100;
int b = 200;
int ret;
// 调用函数来获取最大值
ret = max(a, b);
cout << "Max value is : " << ret << endl;
return 0;
}
// 函数返回两个数中较大的那个数
int max(int num1, int num2)
{
// 局部变量声明
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
主函数
int main ()
{
...
}
匿名函数
匿名函数又叫Lambda 表达式
,即无需声明直接调用的一块函数体.
[](int x, int y) -> int { int z = x + y; return z + x; }
[] // 沒有定义任何变量。使用未定义变量会引发错误。
[x, &y] // x以传值方式传入(默认),y以引用方式传入。
[&] // 任何被使用到的外部变量都隐式地以引用方式加以引用。
[=] // 任何被使用到的外部变量都隐式地以传值方式加以引用。
[&, x] // x显式地以传值方式加以引用。其余变量以引用方式加以引用。
[=, &z] // z显式地以引用方式加以引用。其余变量以传值方式加以引用。
I/O
基础I/O操作
std::cout << "test";
int i;
std::cin >> i;
文件I/O
ifstream
类,它是从istream类派生的,用来支持从磁盘文件的输入。
ofstream
类,它是从ostream类派生的,用来支持向磁盘文件的输出。
fstream
类,它是从iostream类派生的,用来支持对磁盘文件的输入输出。
更多I/O信息请参考: http://www.purethought.cn/9653474a.html#toc-heading-10
面向对象编程
为了更好的实现代码复用,C++支持面向对象的编程模式.
一个对象,也可以叫做自定义类型(区别于内置类型),其核心内容是被封装的字段(数据成员).
更多 面向对象编程 信息请参考: www.purethought.cn/7447.html
容器
容器主要分为顺序容器和映射.
更多容器信息请参考: http://www.purethought.cn/c1522938.html
关键字
关键字 | 关键字 | 关键字 | 关键字 |
---|---|---|---|
asm | else | new | this |
auto | enum | operator | throw |
bool | explicit | private | true |
break | export | protected | try |
case | extern | public | typedef |
catch | false | register | typeid |
char | float | reinterpret_cast | typename |
class | for | return | union |
const | friend | short | unsigned |
const_cast | goto | signed | using |
continue | if | sizeof | virtual |
default | inline | static | void |
delete | int | static_cast | volatile |
do | long | struct | wchar_t |
double | mutable | switch | while |
dynamic_cast | namespace | template |
标准库
标准库信息请参考: http://www.purethought.cn/56653.html
多线程
TODO.