在本章中,我们将学习以下主题:
1.什么是构造函数初始化列表?
2.使用构造函数初始化器列表“()”
3.使用构造函数初始化器列表“{}”
4.构造函数初始化列表的用例。
1.初始化非静态const数据成员
2.用于参考成员的初始化
3.用于基类成员的初始化
4.构造函数的参数名称与数据成员相同时
什么是构造函数成员初始化器列表?
构造函数成员初始化器列表用于初始化类的数据成员。
没有构造函数成员初始化的示例数据成员初始化器:
#include <iostream> // std::cout // for more tutorials visit www.ProDeveloperTutorial.com using namespace std; class A { 整型 num; public: // initializing a data member without constructor initializer list A(int a) { num = a;} }; int main(void) { A aObj(10); return 0; }
带有构造函数成员初始化的示例数据成员初始化器:
#include <iostream> // std::cout // for more tutorials visit www.ProDeveloperTutorial.com using namespace std; class A { 整型 num; public: // initializing a data member with constructor initializer list A(int a):num(a) {} }; int main(void) { A aObj(10); return 0; }
成员初始化器列表的语法:
我们应该使用冒号“:”然后是数据成员名称和大括号,您应该给出从构造函数获得的参数的名称。
<Constructor_Name> (parameter) : data_member(parameter);
构造函数成员初始化器列表使用“()”
通过使用“()”,它不会检查收窄。
示例,下面我们分配了“int” value to “char” data type. This is called as narrowing because, 整型eger is 4 bytes and 烧焦 is 1 byte.
当我们使用“()”,它不会发出任何警告。
#include <iostream> // std::cout // for more tutorials visit www.ProDeveloperTutorial.com using namespace std; class A { 烧焦 c; public: A(int a): c(a) { } }; int main(void) { A aObj(10); return 0; }
构造函数初始化列表使用“{}”
通过使用“{}”,它将检查变窄并产生警告。
通常“{}” is preferred over “()”.
#include <iostream> // std::cout // for more tutorials visit www.ProDeveloperTutorial.com using namespace std; class A { 烧焦 c; public: A(int a): c{a} { } }; int main(void) { A aObj(10); return 0; }
输出:
main.cpp:12:18: warning: narrowing conversion of ‘a’ from ‘int’ to ‘char’ inside { } [-Wnarrowing]
产生警告。
多个数据成员示例的构造函数成员初始化器列表:
对于多个数据成员的初始化,我们应该使用“,” comma operator.
例:
#include <iostream> // std::cout // for more tutorials visit www.ProDeveloperTutorial.com using namespace std; class A { 整型 num1; 整型 num2; public: A(int a, 整型 b): num1{a}, num2{b} { } }; int main(void) { A aObj(10, 20); return 0; }
构造函数初始化器列表的用例。
1.初始化非静态const数据成员
#include <iostream> // std::cout // for more tutorials visit www.ProDeveloperTutorial.com using namespace std; class A { //const data member const 整型 num1; public: A(int a): num1{a} { } }; int main(void) { A aObj(10); return 0; }
2.用于参考成员的初始化
#include <iostream> // std::cout // for more tutorials visit www.ProDeveloperTutorial.com using namespace std; class A { //reference data member 整型 &num1; public: A(int a): num1{a} { } }; int main(void) { A aObj(10); return 0; }
3.用于基类成员的初始化
#include <iostream> // std::cout // for more tutorials visit www.ProDeveloperTutorial.com using namespace std; class A { 整型 aNum; public: A(int num1): aNum{num1} { } }; class B: public A { 整型 bNum; public: // initializing A's data member by calling A constructor as "A {num1}" B(int num1, 整型 num2): A{num1}, bNum(num2) { } }; int main(void) { B bObj(10,20); return 0; }
4.构造函数的参数名称与数据成员相同时
#include <iostream> // std::cout // for more tutorials visit www.ProDeveloperTutorial.com using namespace std; class A { // data member 整型 num1; public: // parameter name is same as data member name A(int num1): num1{num1} { } }; int main(void) { A aObj(10); return 0; }
该网站上可用的教程列表:
C编程20+章 | C ++编程80+章 |
100多个编码问题 | 数据结构和算法85+章 |
系统设计20+章 | Shell脚本编写12章 |
4g LTE 60+章节 | 最常见的编码问题 |
5G NR 50+章 | Linux系统编程20+章 |