这个构造函数在做什么
What is this constructor doing?
更新:感谢您的快速回复,并对重复的内容表示抱歉——我不知道该搜索什么,因为我不知道这个构造叫什么。
我只使用过非常非常简单的C++类(在使用Arduino时),所以如果这个问题太基本,请原谅
我试图理解下面的代码片段,它来自一个Qt BLE示例。我以前从未见过这样的构造函数。有人能告诉我它叫什么吗(风格等,这样我就可以查了),和/或它在做什么吗?
很明显,它正在初始化一些实例和变量,但我不明白为什么。。。(它们不是parameters
,那它们是什么?)"initializers"在大括号之外。
乒乓球.cpp
乒乓球.h
PingPong::PingPong():
m_serverInfo(0), socket(0), discoveryAgent(0), interval(5), m_resultLeft(0), m_resultRight(0),
m_showDialog(false), m_role(0), m_proportionX(0), m_proportionY(0), m_serviceFound(false)
{
m_timer = new QTimer(this);
connect(m_timer, SIGNAL(timeout()), this, SLOT(update()));
}
这是一种在C++中初始化类成员的方法,称为成员初始化器列表。
另一种方法(主要是C++11/14/17)可以直接在头文件/类声明中初始化成员
假设:
class PingPong
{
public:
PingPong();
private:
int32_t m_serverInfo{0};
std::string m_aString{"I am a string"};
};
计时器和connect()
用于初始化QTimer,并连接计时器发出的信号timeout()
,并将该事件连接到另一个名为update()
的函数和PingPong类的成员
这被称为成员初始化列表。对于不能默认初始化的成员和基,这是必需的。但它也是,就像这里一样,只是一个方便的符号。
请注意,列表中的顺序不会影响实际的初始化顺序。
无论成员初始化列表中的顺序如何,初始化的成员都按声明顺序进行初始化。然而,如果这些订单不同,您可能会收到警告。黄鼠狼语言的原因:如果用于初始化对象的构造函数没有显式初始化某些纯旧数据成员(例如int
成员),并且该成员没有用默认初始化器声明,那么该成员就没有初始化,具有不定值。
然而,对相关细节的全面讨论时间太长,无法在此进行。
你需要一本好的C++教材,为此你可以查阅SO C++图书列表。
它的成员初始值设定项列表:
成员初始值设定项列表指定直接和虚拟基子对象以及非静态数据成员的初始值设定值。
在构成构造函数函数体的复合语句开始执行之前,所有直接基、虚拟基和非静态数据成员的初始化都已完成。成员初始值设定项列表是可以指定这些对象的非默认初始化的位置。对于无法默认初始化的成员,例如引用和常量限定类型的成员,必须指定成员初始值设定项。不为没有成员初始值设定项的匿名联合或变体成员执行初始化。
列表中成员初始化程序的顺序无关紧要:实际初始化顺序如下:
1) 如果构造函数用于派生最多的类,则为虚拟基类类按照它们在中出现的顺序进行初始化基类声明的深度优先从左到右遍历(从左到右指出现在基本说明符列表中)
2) 然后,按从左到右的顺序初始化直接基类因为它们出现在这个类的基本说明符列表中
3) 然后,按以下顺序初始化非静态数据成员类定义中的声明。
4) 最后,构造函数的主体被执行
- 是什么让放置新调用对象的构造函数?
- 如果我真的真的想从 STL 容器继承,并且我继承构造函数并删除新运算符,会发生什么?
- 使用基类指针调用基类的值构造函数的语法是什么?
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- 构造函数后面的宏.什么意思?
- C++构造函数内部会发生什么?
- 用相同的参数声明两个构造函数的最偶像化的方法是什么?
- 如果在 C++ 构造函数中以错误的顺序初始化对象数据,会发生什么类型的错误
- 我是否为邪恶刽子手的构造函数错过了什么?
- 构造函数中没有参数的对象类成员按什么顺序初始化?
- 什么时候用指针调用C++类构造函数
- 这个构造函数是做什么的
- 将复制构造函数设置为private和=delete有什么区别
- 我不明白在这个例子中什么时候调用构造函数
- 在C++中,从构造函数中将字符串文本分配给成员const char*变量时会发生什么
- c++ 17 中结构自动定义构造函数的规则是什么?
- 在C++中初始化带有和不使用构造函数调用的对象有什么区别
- 指示汇编时间叫什么构造函数
- 在这种情况下调用什么构造函数
- 使用什么构造函数