c++中的几类构造函数:成员初始化列表,构造函数体内赋值,带有逻辑的构造函数,默认构造函数

在C++中,构造函数并不一定都像你提供的那样。构造函数的形式和内容可以有所不同。具体来说,构造函数可以有不同的写法,主要取决于需要初始化的成员变量和构造函数的逻辑。下面是一些常见的构造函数写法和使用场景。

成员初始化列表

成员初始化列表(member initializer list)是在构造函数中初始化成员变量的一种方式。它在冒号后面跟随成员变量的初始化表达式。这种方式特别适用于需要初始化const成员变量、引用成员变量以及没有默认构造函数的成员对象。成员初始化列表在构造函数体之前执行。

  • 注意:如果有多个参数,此时在创建对象的时候可以选择传0-n个参数,不必按照构造函数里的参数数量来传

class A {
private:
    int x;
    int& rx;
    const double pi;
public:
    A(int v) : x(v), rx(x), pi(3.14) { }
};

这种方式可以保证成员变量在进入构造函数体之前已经被初始化。

构造函数体内赋值

如果成员变量可以通过默认构造函数初始化,或者不需要特别的初始化逻辑,也可以在构造函数体内进行赋值。


class B {
private:
    int x;
    double y;
public:
    B(int v) {
        x = v;    // 在构造函数体内赋值
        y = 0.0;  // 在构造函数体内赋值
    }
};

这种方式更适用于没有const和引用类型的成员变量。

带有逻辑的构造函数

构造函数也可以包含逻辑代码,比如条件判断、函数调用等,以便进行更复杂的初始化操作。


class C {
private:
    int x;
    double y;
public:
    C(int v, double w) {
        if (v > 0) {
            x = v;
        } else {
            x = 0;
        }
        y = w * 2;
    }
};

这种方式允许在初始化过程中进行更多的控制和操作。

默认构造函数

如果类中没有任何显式定义的构造函数,编译器会自动生成一个默认构造函数。默认构造函数通常用于没有参数的情况。


class D {
private:
    int x;
    double y;
public:
    D() : x(0), y(0.0) { } // 显式定义默认构造函数
};

总结
成员初始化列表适用于const成员变量、引用成员变量以及没有默认构造函数的成员对象。
构造函数体内赋值适用于非const、非引用类型的成员变量。
构造函数可以包含逻辑代码以实现更复杂的初始化。
没有显式定义构造函数时,编译器会生成一个默认构造函数。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 13:08:02       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 13:08:02       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 13:08:02       57 阅读
  4. Python语言-面向对象

    2024-07-17 13:08:02       68 阅读

热门阅读

  1. GNN Algorithms(9): 多模态Multi-Modal、多任务Multi-Task

    2024-07-17 13:08:02       27 阅读
  2. Julia 流程控制

    2024-07-17 13:08:02       24 阅读
  3. 关于C# 开发Winfrom事后总结

    2024-07-17 13:08:02       25 阅读
  4. 什么是决策树?

    2024-07-17 13:08:02       28 阅读
  5. android binder如何实现异步

    2024-07-17 13:08:02       17 阅读
  6. 基于STM32设计的物联网智能鱼缸(微信小程序)(187)

    2024-07-17 13:08:02       26 阅读
  7. 文件查找和文件删除

    2024-07-17 13:08:02       20 阅读
  8. axios

    2024-07-17 13:08:02       22 阅读