C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).



析构器不用手动调用。
重载只能在同一个类中,子类不能重载从父类继承来的方法。



类的静态方法、属性其实就是作用域为类的静态变量、函数。



virtual :运行是确定,而不是编译时。
1 | int main() |
如果自己声明析构函数,一定要加上virtaul声明为虚函数,不然会造成子类的析构函数不会被调用的情况。




为ostrem添加 << 运算符重载



虚继承

Student和Teacher类都从Person类继承,那么TeacherStudent类的对象就会出现两个Person类的实例(有两个name属性)。



Teacher类和Student类是虚继承Person类,都拥有不了Person的拷贝。
1.如果基类虚继承了别的类,子类需要自己真正去继承这个类。(构造函数的时候调用这个类的构造函数)
副本构造器
重载赋值运算符 = ,当遇到指针是拷贝指针指向地址的内容。
运算符重载函数最后返回这个对象的引用,这样就可以连续赋值。

以上的if判断:a = a 不需要处理。类的运算符 = 重载只在对象已经被实例化时拷贝可行。在对象实例化的时候同时赋值就不行。

对象实例化时同时赋值我们的重载 = 就不起作用了,此时编译器会在类中找一个叫做副本构造器的东西。

副本构造器其实就是一个接收一个此类对象引用的普通构造器,可以在类中定义重载多个参数不同的构造器。
- C语言强制类型转换的缺陷


dynamic_cast<MyClass*>(value):安全的强制转换,C++经常用到。



链接
每个文件就有一个独立的翻译单元,只有具有外链接的作用域才能被其他翻译单元看见。

普通的函数、变量、模板和命名空间都有外链接。


范型编程





- 函数模板


- 类模板
1 | template <class T> // 这是一个类模板 |
内联模板

inline关键字不一定生成内联函数,看编译器处理。

建议使用内联的方式写类模板比较好,不用每次在定义类方法时写这个一个类模板的方法。类似下面:


STL库(在C99列为C++的一部分)
一个基于模板设计的操作各种数据结构的库。

- vector列子:

迭代器(智能指针)


STL库每个容器里面都会提供一个迭代器,vector就是一个容器。

STL库中的算法


- 本文作者: 龙兄嵌入式
- 本文链接: https://hexo.880755.xyz/2022/09/17/C++快速入门/