【C++面向对象备忘录】1 基础

类定义的一般格式

class 类名 {
    [private:]
        私有数据成员和成员函数
    public:
        公有数据成员和成员函数
};
  • 数据成员一般是私有的
  • 成员函数一般是公有的
  • 成员函数实现时分解出的小函数是私有的

this指针

每个成员函数都有一个隐藏的指向本类型的指针形参this,它指向当前调用成员函数的对象

如对函数

void create(int n, int d) { num = n; den = d;}

经过编译后,实际函数为

void create(int n, int d) 
    { this->num = n; this->den = d;}
  • 通常,在写成员函数时可以省略this,编译时会自动加上它们。
  • 如果在成员函数中要把对象作为整体来访问时,必须显式地使用this指针。这种情况常出现在函数中返回一个对调用函数的对象的引用(如return * this;)

必须在初始化列表中初始化的情况

  • 数据成员不是普通的内置类型,而是某一个类的对象,可能无法直接用赋值语句在构造函数体中为它赋初值
  • 类包含了一个常量的数据成员,常量只能在定义时对它初始化,而不能对它赋值。因此也必须放在初始化列表中

【BUG】如果类成员有指针,而拷贝的时候只拷贝了指针,则可能在一个对象析构时,导致其他对象的数据丢失。

拷贝构造函数的应用场合

  • 对象用拷贝构造定义时,有两种情况,见下方。
Class obj1(args...);

//Type1
Class obj2 (obj1);

//Type 2
Class obj = Class(args...); //先构造临时对象,再拷贝构造obj对象
Class obj2 = obj1;
  • 把对象作为参数传给函数时。注意如果是引用传递就没有这个过程。

  • 把对象作为返回值时(与编译器有关,VS一定会用拷贝构造)。

对象的生命周期

  • 创建顺序:遇到变量定义时调用构造函数。与普通的内置类型的变量完全相同。

  • 消失顺序:

  1. 局部变量先消失,然后是静态局部变量, 最后是全局变量;
  2. 后创建的先消失。

你可能感兴趣的:(【C++面向对象备忘录】1 基础)