C++类的注意事项

  1. 类的声明放在头文件中,类的实现放到cpp文件中
  2. 如果要把一个类的函数定义了内联函数,可以在声明中直接定义,或者在实现中添加inline关键字。
  3. 如果类没有任何构造函数,那么系统会提供一个无参的默认构造函数。如果提供了任何形式的构造函数,系统将不再提供无参的默认构造函数。

创建类对象的方式

Person p; // 调用无参构造函数
Person p1("David", 12); // 调用有参默认构造函数
Person p_person = new Person("Frank", 12); // 调用有参默认构造函数
Person p2 = {"david", 23}; // C++11的{}初始化方式
Person p3{"Frank", 12}; // C++11,省略等号
Person p4{}; // C++11,调用无法构造函数

const 成员函数

如果一个对象被const修饰,那么这个对象所有属性将不再改变

// const类型对象,对象属性不再改变
const Person p("david", 12);

但是如果这个对象,调用了可以改变属性的函数,那么编译器将会报错,因此需要在函数后面声明一个 const,表示函数不会修改对象的属性

// 声明
void show() const;

// 定义
void show() const 
{
    // ...
}

const函数规则: 如果函数不修改对象的属性,那么尽量声明为const函数。

this指针

this指针指向调用函数的类对象,因此如果要返回类对象,必须执行解引操作,也就 *this

类的常量

如下定义方式是错误的

class Test
{
    const int MONTHS = 12;
    double cost[MONTHS];
};

类的声明只是一个形式,在没有创建对象之前,MONTHS不会被分配内存,因此编译器在编译这段代码时,无法识别MONTHS的值。

可以使用枚举或静态变量,在类的声明中创建常量,因为它们在编译期就分配了内存

class Test
{
    // 静态变量在编译期就分配内存
    static const int MONTHS = 12;
    double cost[MONTHS];
};
class Test
{
    enum {MONTHS = 12};
    double cost[MONTHS];
};

你可能感兴趣的:(C++类的注意事项)