nullptr
关键字
在C++11之前,空指针通常用NULL
或0
表示。然而,这些表示方法存在类型安全问题。C++11引入了nullptr
关键字,它提供了一个明确的、类型安全的空指针值。
Lambda表达式
Lambda表达式是C++11引入的一种便捷的匿名函数定义方式。当Lambda表达式没有捕获外部变量时,它可以被用作函数指针。Lambda表达式提供了一种快速定义函数对象的方法,特别是在需要临时使用的小函数时。
没捕获的情况下,这个表达式可以充当函数的指针
函数指针举例:
内存管理
C++提供了两种内存分配方式:new
和malloc
,以及它们的释放方式:delete
和free
。
new
会自动调用对象的构造函数,而malloc
不会。- 相对地,
delete
会调用对象的析构函数,而free
不会。 - 使用
malloc
分配的内存需要强制类型转换,而new
不需要。 malloc
和free
是C语言中的函数,而new
和delete
是C++的关键字。
类和继承
类是C++中实现封装和数据抽象的基本单位。继承是类与类之间的一种关系,它允许一个类(派生类)继承另一个类(基类)的属性和方法。
继承类型
- 单继承:派生类只继承一个基类。
- 多继承:派生类可以继承多个基类。尽管多继承提供了更大的灵活性,但通常推荐使用单继承,以避免复杂的继承关系带来的问题。
Base是直接基类
Base0是间接基类
派生类的生成过程
- 吸收基类成员:派生类自动拥有来自基类的所有属性和方法,但不包括构造函数和析构函数。
- 改造基类成员:如果派生类中有与基类同名的成员或方法,基类的相应成员或方法会被隐藏。这种情况下,如果尝试访问被隐藏的基类成员,将会导致编译错误。
这个情况下基类的fn会被隐藏
这样使用将会报错基类fn函数被隐藏了只有派生类的
这个情况是隐藏并不是重载
重载是要在同一作用域下
这个时候派生类字节大小为4
这个时候则为8
但是调用的时候是调用派生类的
3.添加基类成员:派生类可以添加新的成员或方法,以扩展基类的功能。
类型兼容规则
类型兼容规则指出,在需要基类对象的任何地方,都可以使用公有派生类的对象来替代。这意味着一个派生类对象可以隐含地转换为基类对象。然而,需要注意的是,这种转换遵循的是静态类型转换,调用的将是基类的成员函数。
这个时候调用的是基类的fn