C++

1 基本特性

2 类型转换

语法形式:
类型说明符 (表达式)
(类型说明符) 表达式
类型操作符<类型说明符>(表达式) —— C++ 特有形式

类型操作符可以是:
const_cast、dynamic_cast、static_cast
例:int(z)(int)zstatic_cast<int>(z) 三种完全等价。

3 常用的 I/O 流类库操作符

常用 IO 流类库操作符

4 基类与派生类

  • 单个类中的访问权限:

    • public(公有成员):在类的内部和外部都可以直接访问;
    • protect(保护成员):在本类的内部和派生类的内部可以直接访问,外部均不可以直接访问,外部只能通过成员函数或友元函数进行访问;
    • private(私有成员):在类的内部可以直接访问,外部不可以直接访问,外部只能通过成员函数或友元函数进行访问。
  • 继承方式:

    • public:基类中的成员访问权限在派生类中不变;
    • protect:基类中的 public 成员在派生类中变为 protect 成员,其它不变;
    • private:基类中的所有成员在派生类中均变为 private 成员。
  • 派生类的构成

    • 派生类拥有基类所有的数据成员和成员函数;
    • 派生类可以拥有基类没有的数据成员和成员函数;
    • 可以通过访问说明符控制成员的访问权限;
    • 派生类是一种特殊的基类, 可以将派生类对象当作父类对象使用;
    • 友元函数不能被继承, 友元函数不是成员函数。
    • 可以通过在派生类中声明同名的成员, 来实现修改基类成员功能的效果。

    派生类的构成

  • 访问属性设置的原则:

    • 需要被外界访问的成员,设置为:public;
    • 只能在当前类中访问的成员, 设置为:private;
    • 只能在当前类和派生类中访问的成员,设置为:protected。

    派生类的访问控制

    派生类的访问控制

5 构造函数和析构函数

在我们创建新的对象的时候,都要执行某一个类中的构造函数,而当调用构造函数分配了资源之后,当我们销毁一个对象的时候需要一个相应的操作将这些资源释放出去,这就需要析构函数。一般来说,在有基类和派生类存在时,在创建派生类类型时,会先构造基类,再构造派生类,析构顺序反之,类似于进栈出栈的过程。

指针不会调用构造和析构函数:

example1-constructor

当对指针用 new 在内存中开辟空间的时候会调用构造函数:

example2-constructor

当我们使用 new 为指针开辟空间,然后用 delete 释放掉空间会调用构造和析构函数:

example3-constructor

当我们函数的形参是一个对象的时候,这时候会系统只会调用析构函数,而缺少形参的构造函数:

example4-constructor

当形参为一个对象的时候,实参也为对象,这时候系统会将实参复制一份给形参,此时系统就不会再给形参额外调用构造函数来对形参对象初始化了,所以就不会调用构造函数,但是形参被销毁的时候还是会调用析构函数!

当我们函数的形参是一个引用的时候,这时候会系统不调用构造函数和析构函数:

example5-constructor

当形参为一个引用的时候,实参也对象,这时候系统会将形参指向实参,此时系统就不会对形参调用构造函数和析构函数!

构造函数存在的目的就是为了给对象在内存中开辟空间并且给对象设置一些初始值,而析构函数就是将某个对象从内存中抹除,而设置的,经典的例子就是上边的指针的例子。

6 设计模式

7 应用

三种计时方法

8 参考文献


C++
https://laplac2.github.io/cpp/cpp/
作者
Laplace
发布于
2022年3月18日
许可协议