[英]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变量?
我希望这不是一个愚蠢的问题,但我想真正理解它。
和平。
第一种初始化x和y的类型是在构造函数主体内,第二种是您使用的成员initializer-list。
它们是相同的,但是在使用继承时必须在其中使用成员列表初始化程序,因此您不能在派生类的构造函数定义的主体内调用基本构造函数。 例如:
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
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.