赞
踩
数据的分类
变量的作用域
静态局部变量作用域被限制在定义它们的函数内。这是因为静态局部变量的存在是为了保存函数内的状态,而不影响全局或外部状态。如果一个函数既可以用全局变量也可以用静态局部变量满足该函数要求,优先考虑静态局部变量,因为更安全。
字符的本质
C++11的原始字面量
如果在字符串中存入路径,需要两个\\,以免一个\后面的字符被认为是控制字符。
如果路径过长,再输入一个\比较麻烦,因此用原始字面量。
此外,如果字符串过长,可以用原始字面量避免用连接符连接字符串,还可以顺便对齐格式。
数据类型的别名
const修饰指针
void关键字
内存模型
二级指针
函数指针和回调函数
数组
void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *))
C风格字符串
二维数组用于函数的参数
行指针(数组指针)
数据类型 (*行指针名) [行的大小]
一维数组名被解释为数组第0个元素的地址。
对一维数组名取地址得到的是数组的地址,是行地址。
引用
引用作为函数参数,可以避免使用二级指针。
引用的形参与const
如果函数的实参不是左值或与const引用形参的类型不匹配,那么c++将创建正确类型的匿名变量,将实参的值传递给匿名变量,让形参来引用该变量。
各种形参的使用场景
重载operator new 和 operator delete
内存池
该类占有8个字节大小,因此设计一个18字节大小的内存池,分为两块,每块第一个字节表示该块是否被占用。
重载的operator new 和 operator delete函数都是静态函数,因此无法使用类的普通成员变量。
继承
继承的对象模型
名字遮蔽与类作用域
继承的特殊关系
运行阶段类型识别-dynamic cast
typeid运算符和type_info类
函数模板
模板类
嵌套和递归使用模版类
模板类与继承
模板类与函数
模板类与友元
模板类嵌套模板类
编译预处理
编译和链接
C++类型转换
C++认为C风格的类型转换可能会带来隐患,提供了四个关键字:static_cast,const_cast,reinterpret_cast和dynamic_cast用于类型转换。
static_cast
reinterpret_cast
const_cast
dynamic_cast
dynamic_cast是 C++ 中用于在运行时进行类型安全的强制类型转换的一种运算符。它主要用于在类层次结构中,将基类指针或引用转换为派生类指针或引用。dynamic_cast
需要运行时类型信息 (RTTI) 的支持,因此它只能在包含虚函数的多态类型中使用。
源类型必须是指针或引用,目标类型必须是多态类型。
假设有以下类层次结构:
class Base {
virtual void foo() {} // 必须有虚函数
};
class Derived : public Base {
void bar() {}
};
class AnotherDerived : public Base {
void baz() {}
};
Base* basePtr = new Derived();
Derived* derivedPtr = dynamic_cast<Derived*>(basePtr);
if (derivedPtr) {
derivedPtr->bar(); // 转换成功,可以调用 Derived 类的方法
} else {
// 转换失败,derivedPtr 为 nullptr
}
cpp复制代码Base* basePtr = new AnotherDerived();
Derived* derivedPtr = dynamic_cast<Derived*>(basePtr);
if (derivedPtr) {
derivedPtr->bar(); // 不会执行,因为转换失败
} else {
// 转换失败,derivedPtr 为 nullptr
}
Base& baseRef = *basePtr;
try {
Derived& derivedRef = dynamic_cast<Derived&>(baseRef);
derivedRef.bar(); // 如果转换成功,可以调用 Derived 类的方法
} catch (const std::bad_cast& e) {
// 转换失败,抛出 std::bad_cast 异常
std::cerr << "bad_cast: " << e.what() << std::endl;
}
容器
string容器
构造和析构
string容器操作
vector容器
迭代器
关于容器中的范围for循环、
list容器
pair键值对
map
unordered_map
queue容器
其他容器
array
set & multiset
priority_queue
STL算法
img-Bz3ETlOV-1717401431032)]
- 关于为什么stl算法可以用仿函数?仿函数写起来感觉比普通函数麻烦,那么仿函数有什么用?
- 假设我们需要自定义想要的元素,那么普通函数应该这么修改。
- [外链图片转存中…(img-Y1bScXWz-1717401431032)]
- [外链图片转存中…(img-FQhJVxCR-1717401431032)]
- 假如我们需要的参数越来越多,那么普通函数所需要的参数也就会越来越多,我们的框架(算法findif)也需要一同修改,这个不符合代码规范。除非用回调函数传参数的方法。如果用仿函数就不存在这个问题了。
- [外链图片转存中…(img-2VvZokPa-1717401431032)]
- [外链图片转存中…(img-EXWMn19p-1717401431032)]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。