c++ - 定义类构造器

标签 c++ class constructor

我正在处理我的第一门 C++ 编程类(class),这就是我被告知定义类构造函数的方式:

class_name(int x, int y){
    this->x=x;
    this->y=y;
  };

如果我理解正确,就像我在这里多次发现的那样,我可以这样重写它:

field(int x, int y) : m_x(x), m_y(y){};

但是有这个 protected 变量:

protected:
    int m_x, m_y;

代替

protected:
    int x, y;

它们之间有什么区别还是只是写法不同?

如果是这样,为什么需要不同的 m_xx 变量?

我希望这不是一个愚蠢的问题,但我想真正理解它。

和平。

最佳答案

Q1。我应该使用构造函数 initializer list还是在构造函数体中初始化?

在可能的情况下,构造函数初始化列表是最佳选择的原因有两个:

  1. const 成员、引用成员和没有默认构造函数的成员对象只能在构造函数初始化列表中初始化
  2. 在构造函数体中初始化的成员对象必须默认构造,然后单独初始化;这会错过优化机会并阻止这些对象在 1
  3. 中调出任何成员

Q2。我应该为成员变量使用命名约定吗?

是的。谷歌,for example , 建议使用尾部下划线命名成员变量,但是 m_ 前缀实现了相同的目标,即节省了读者查找该变量是否在当前范围内声明的时间,或者该变量是否是一个成员变量。

关于c++ - 定义类构造器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40333190/

相关文章:

c++ - 未找到 OpenCL 平台

java继承

python - 属性错误: 'Employee' object has no attribute 'WorkingHours'

c++ - 这两个类型测试对象动态数组声明之间的区别?

c++ - 声明 typedef 类型

c++ - Recv-Q+Send-Q>写入字节

c++ - 使用默认值初始化 const 类成员

php - PHP 中的 LXML 库?

JQuery 类的障碍

c# - 在子类中更改静态变量而不在父类中更改它