[QT]在类的构造函数参数列表输入所有参数
在 C 类的构造函数中通过参数列表成员初始化列表初始化成员变量是规范且高效的做法尤其对于 const 成员、引用成员或没有默认构造函数的对象。以下是如何在构造函数参数列表中传入并初始化所有成员的示例示例场景假设有一个Person类包含 4 个成员变量name字符串、age整数、height浮点数、isStudent布尔值。我们需要在构造函数中传入所有参数并通过初始化列表初始化成员。代码实现cpp#include string using namespace std; class Person { private: string name; // 姓名 int age; // 年龄 float height; // 身高米 bool isStudent; // 是否为学生 public: // 构造函数参数列表包含所有成员的初始化参数 // 格式构造函数名(参数1, 参数2, ...) : 成员1(参数1), 成员2(参数2), ... {} Person(string n, int a, float h, bool s) : name(n), age(a), height(h), isStudent(s) { // 构造函数体可选可放额外初始化逻辑 } // 可选打印成员信息的方法 void printInfo() { cout 姓名 name endl; cout 年龄 age endl; cout 身高 height m endl; cout 是否学生 (isStudent ? 是 : 否) endl; } }; // 使用示例 int main() { // 创建对象时传入所有参数 Person p(张三, 20, 1.75f, true); p.printInfo(); return 0; }关键说明参数列表语法构造函数后用:开头后跟成员变量(参数)的列表用逗号分隔最后是构造函数体可空。例如Person(...) : name(n), age(a), ... {}为什么用初始化列表对于const成员如const int id;、引用成员如int ref;必须在初始化列表中初始化不能在构造函数体内赋值。对于类类型成员如QString、自定义对象初始化列表直接调用其构造函数比在函数体内先默认构造再赋值更高效。参数与成员名冲突若参数名与成员名相同不推荐可通过this-成员名区分或在初始化列表中用类名限定cppPerson(string name, int age) : name(name), age(age) {} // 允许编译器可区分Qt 类的示例在 Qt 中对QObject子类或带父对象的类同样适用cpp#include QObject #include QString class MyWidget : public QWidget { Q_OBJECT private: QString title; int width; int height; public: // 构造函数包含父对象参数Qt 常用 MyWidget(QString t, int w, int h, QWidget* parent nullptr) : QWidget(parent), title(t), width(w), height(h) { setWindowTitle(title); resize(width, height); } };总结在构造函数参数列表中传入所有参数并通过成员初始化列表初始化是 C 推荐的做法尤其适合需要高效初始化、处理 const / 引用成员或类类型成员的场景。格式清晰且能避免不必要的性能开销。