Coursera C++ Part A [Week3] Class and List

[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 name

C++标准库中的vector,可以快速地随机访问

#include 
vector name(size); //创建向量

你可能感兴趣的:(Coursera C++ Part A [Week3] Class and List)