定义类构造函数
defining a class constructor
我正在处理我的第一堂c++编程课,这就是我被告知定义类构造函数的方式:
class_name(int x, int y){
this->x=x;
this->y=y;
};
如果我理解正确的话,就像我在这里多次发现的那样,我可以这样重写:
field(int x, int y) : m_x(x), m_y(y){};
但是有这个保护变量:
protected:
int m_x, m_y;
代替
protected:
int x, y;
他们之间有什么不同,还是只是不同的写作方式?
如果是这样,为什么需要有不同的m_x和x变量呢?我希望这不是一个愚蠢的问题,但我想真正理解它。
和平。
我应该使用构造函数初始化列表还是在构造函数体中初始化?
在可能的情况下,构造函数初始化列表是最佳选择有两个原因:-
const
成员、引用成员和没有默认构造函数的成员对象只能在构造函数初始化列表中初始化 - 在构造函数体中初始化的成员对象必须默认构造,然后单独初始化;这会错过优化机会,并阻止这些对象在1 中调用任何成员。
Q2。我应该为成员变量使用命名约定吗?
是的。例如,Google建议使用末尾的下划线来命名成员变量,但是m_
前缀可以达到同样的目的,即节省读者查找该变量是否在当前作用域中声明的时间,或者该变量是否是成员变量的时间。
初始化x和y的第一种类型是在构造函数体中,第二种类型是使用成员初始化列表。
它们是相同的,但是在使用继承时必须使用成员列表初始化器,因此您不能在派生类的构造函数定义的主体中调用基构造函数。如:
class A
{
public:
A(int x) : _x(x){} // ok
// A(int x) {_x = x;} ok
protected:
int _x;
};
class B : public A
{
public:
// B(int x) {A(x);} error here
B(int x) : A(x){} // we must use member initializer list here
};
相关文章:
- 具有enable_if外部类原型的模板类构造函数定义
- 构造函数定义中类声明中的模板值
- C++中的继承和构造函数定义
- 如何使用模板化构造函数定义演绎指南?
- 构造函数定义C
- 不正确的成员构造函数定义
- 具有虚拟多重继承的构造函数定义
- C++谷歌测试在哪里放置测试夹具构造函数定义
- 模板类定义中的模板构造函数定义
- C++下面给出的代码中的构造函数定义差异
- 带继承的构造函数定义
- 无法访问构造函数定义之外的变量
- 调用构造函数定义中的函数后收到Segmentation Fault 11错误
- 将具有默认值的构造函数定义为组合对象的私有字段
- 防止重新定义构造函数定义的方法
- 继承构造函数-定义可移植的固定大小类型(C++)
- 在类的私有部分为复制构造函数定义原型如何防止类的复制
- 如何指定继承类的构造函数定义
- 了解默认移动构造函数定义
- 理解构造函数定义块的语法变化