C++学习笔记

第2章 基础

include头文件

  • C风格:<math.h>
  • C++风格(引入C库):
  • C++风格(C++库):

名称空间

  • using namespace std;
  • std::cout << "";
  • using std::cout;

函数
函数原型:只描述函数接口,一般在头文件中
函数定义:函数具体实现代码,一般在库文件中

第3章 处理数据

变量
下划线开头和包含两个下划线的变量由系统使用

输出不同进制

  • 二进制:bitset<32> x(num);
  • 八进制:cout<<oct;
  • 十进制:cout<<dec;
  • 十六进制:cout<<hex;

bool类型
任何数字和指针可以隐式转换为bool:非0为true,0为false

const常量
比#define更好:明确类型且限制作用域

强制类型转换
不修改变量本身,会创建一个新的指定值

  • C风格:(int) a
  • C++:int(a) // 更像函数调用

auto自动推断类型
auto n = 1;

第4章 复合类型

数组
int a[] = {1,2,3};
int a[10] {}; // 省略等号
模板类vector和array可代替数组

字符串
C风格是char a[]数组,以'\0'结尾
char a[] = {'h','e','l','l','o'}; // 这是字符数组,不是字符串
char a[] = {'h','e','l','l','o','\0'}; // 这是正确的字符串
char a[] = "hello"; // 这也是正确的字符串
// sizeof(a) = 6, strlen(a) = 5;

字符串拼接不能用+,直接拼
cout << "hello" "what";

string是C++类型字符串
string s = "hello";
使用+或者+=拼接

字符串操作函数
strcpy() 字符串复制
strcat() 字符串拼接
操作C类型数组不安全,C++类型自动处理不同长度,更安全

原始字符串
string a = R"(this is original)";

结构体
struct MyStruct {
int a;
string b;
}
MyStruct ms; // 省略前面的struct
ms.b = {3, "test"};

共用体
同时只能存储一种类型,占用最大类型的空间
union {
int a;
string b;
}

枚举
enum bits { one = 1, two =2 };

指针
*定义指针,取地址的内容,&取地址
int a = 3;
int *p = &a;
// p 与 a 相同都是数字3,p 与 &a 相同都是一个地址
int * p1,p2; // p1是int
指针,p2是int数字

int *p;
*p = 100; // 这样写是错的,定义指针一定要初始化

int *p = new int;
*p = 100; // 这么写才对

指针创建数组
int * arr = new int[10];
delete[] arr;
// 数组名地址与数组地址相同,但sizeof(arr)返回整个数组字节长度

指针创建结构
访问成员用 ->, 不能用.

存储方式

  • 自动存储:栈内存,自动释放
  • 静态存储:static,全局存在
  • 动态存储:堆内存,用 new 和 delete 分配释放

数组的替代
vector可变数组,array长度固定数组,都自动管理内存;数组和array存储在栈中,vector存储在堆中。

第5章 循环和关系表达式

第6章 分支语句和逻辑运算符

第7章 函数

函数参数默认是值传递,会创建一个新变量。
如果参数是数组,那么会创建一个新的数组指针。
如果参数是结构体,也是传递结构的副本。
如果参数是string,也是传递string的副本。
如果参数是类对象,默认是按值传递,也可以传递指针。

函数指针
指向存储函数机器码的地址
double foo(int); // 函数声明
double (*pf)(int); // 函数指针声明,参数和返回值必须与函数相同。pf可以直接当foo函数使用,也可以当形参。

第8章 函数探幽

内联函数
函数声明和定义前都加上inline,编译器会在调用处替换,而不是跳转到这个函数来调用。

函数模板
参数定义泛型类型

template <typename T>
void swap(T &a, T &b) {
    T temp;
    temp = a;
    a = b;
    b = temp;
}

第9章 内存模型和名称空间

编译
自己的头文件用"",标准库的头文件用<>

防止重复定义

#ifndef MY_H_
#define MY_H_
// 头文件具体内容
#endif

第4章 复合类型

第4章 复合类型

第4章 复合类型

第4章 复合类型

posted @ 2022-07-19 20:14  rome753  阅读(74)  评论(0编辑  收藏  举报