[Week3] C++ Part A, University of Santa Cruz
本周内容:
- 构造函数和初始化列表
- 动态内存分配与析构函数
- 复制构造函数与深层复制
- 链表
- STL vector
推荐参考书
- C++ for C Programmers, ch. 6-7
- C++ by Dissection, ch. 4-6
教授貌似是德国人,讲着讲着冒出德语仿佛回想起了当年被德语支配的恐惧,太可爱啦
1.构造函数与析构函数
1.1 默认构造函数: 参数表为空的构造函数
class classA{
public:
classA(): {} // default constructor
};
1.2 initializer list syntax:
class classA{
public:
classA(x, y): x(x), y(y){} // constructor with initializer list
private:
const int x, y;
};
类中的const成员变量必须在初始化列表中初始化,不能在函数体中初始化
1.3 使用this指针初始化
class classA{
public:
classA(x, y): { // constructor with this
this->x = x;
this->y = y;
}
private:
int x, y
};
当参数名称和类成员变量名称一样的时候,this pointer可以用来解决ambiguous问题。 However initializing syntax is preferred.
构造函数也可以进行类型转换,此时它只有一个参数,提供的基本功能与static_cast相同。
好的程序员会在编写构造函数的时候加入正确性检查。
2. 动态内存分配与析构函数
在C++中动态内存分配与回收的关键字是new和delete。与Java不一样的是,C++不会自动进行垃圾回收,所以使用的时候要非常小心,不过效能更高。
char* s = new char[size]; //get off heap
int* p = new int(9); // single int initialized
delete [] s; // delete an array
delete p; // delete single element
当用new在创建对象的时候,要立即想到编写析构函数
class classA{
public:
~classA(){}
}
析构函数不可以重载,只能有一个,调用时也不加参数
3. 复制构造函数与深层复制
深层复制与浅层复制对应。
浅拷贝:将原对象的引用直接赋值给新对象,新对象只是原对象的引用。对新对象对修改会直接影响原对象
深拷贝:创建一个新对象,将原对象各项的值复制过来。修改新对象不会影响原对象
4.链表
STL中有链表,不赘述。
空指针:nullptr,用nullptr比用NULL和0更好
5. STL list and vector
C++标准库中也有list,当你创建一个list的时候会得到一个双向链表,可以快速插入删除节点
#include <list>
list<type> name
C++标准库中的vector,可以快速地随机访问
#include <vector>
vector<type> name(size); //创建向量
网友评论