C++面向对象复习笔记2021
简单的复习了C++面向对象的部分知识,并把一些遇到的需要回顾的知识点记录到该笔记。
IO Stream
用提取运算符>>
提取数据时,以空白符(如空格、回车、tab)作为数据的分割符,因此提取字符串数据时,不能提取空白字符。如果要每次读入一行,可以用getline
。
|
|
判断打开的文件是否存在,可以调用成员函数is_open()
。
|
|
STL
Vector
与C数组对比:
- 常被称为“动态数组”,因为其大小可以按照需要增长和收缩
- 有内置的操作元素的成员函数
常用成员函数:
push_back()
size()
pop_back()
clear()
empty()
capacity()
reverse()
resize()
迭代器
要访问顺序容器和关联容器中的元素,需要通过“迭代器(iterator)”进行。迭代器是一个变量,相当于容器和操纵容器的算法之间的中介。迭代器可以指向容器中的某个元素,通过迭代器就可以读写它指向的元素。从这一点上看,迭代器和指针类似。
|
|
Class
访问限定符
public
:完全可访问private
:仅该类可以访问protected
:仅该类的成员函数和其派生子类的成员函数可以访问
static
静态成员变量
静态成员变量无需对象实例而存在,且一个类的所有对象共享这个类的相同的静态成员变量,即可以理解为每个对象都有该变量的相同的副本。
静态成员函数
静态成员函数属于这个类的所有实例,并能被该类的任何一个对象调用。
静态成员函数只能访问静态成员变量、静态成员函数和类以外的数据和函数。
多态(Polymorphism)
成员函数:通过基类指针或引用间接指向派生类子类型时多态性才会起作用。
析构:如果一个类用作基类,我们通常需要virtual
来修饰它的析构函数,这点很重要。如果基类的析构函数不是虚析构,当我们用delete来释放基类指针(它其实指向的是派生类的对象实例)占用的内存的时候,只有基类的析构函数被调用,而派生类的析构函数不会被调用,这就可能引起内存泄露。如果基类的析构函数是虚析构,那么在delete基类指针时,继承树上的析构函数会被自低向上依次调用,即最底层派生类的析构函数会被首先调用,然后一层一层向上直到该指针声明的类型。1
纯虚函数:只有声明没有定义的虚函数,提供了一个可被子类型改写的接口:
|
|
含有一个或多个纯虚函数的类为抽象类,抽象类本身不能产生对象实例,否则代码将不能编译。
参考资料
-
C++ Virtual详解.悦峰 ↩︎