ProDeveloperTutorial.com

教程和编程解决方案
菜单
  • Shell脚本
  • 系统设计
  • Linux系统编程
  • 4g LTE
  • 编码问题
  • C
  • C ++
  • DSA
  • GIT

CPP第49章:具有不同用例的CPP构造函数成员初始化器列表教程。

前开发者教程 2020年2月26日
在本章中,我们将学习以下主题:
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+章
分享
电子邮件
鸣叫
领英
Reddit
绊倒
Pinterest的
上一篇文章
下一篇

关于作者

前开发者教程

每天我们都会讨论竞争性编程问题,请加入我们的网站:   电报频道

ProDeveloperTutorial.com

教程和编程解决方案
版权© 2020 ProDeveloperTutorial.com
从以下课程获得热门课程: 教育性的
<tt id="BAW08N5" class="BZJLBGC"><var id="NYQDIth" class="NoE5Je0"><input id="uaJ1qDL"><xmp class="pSuzlKu">
    <col class="PDYqspR"><tfoot id="ARWEW1v" class="A62VW2I"><dfn id="kqXoiE3" class="kKz7dZE"></dfn></tfoot></col>

    <keygen id="GJ3o6Xa" class="GgCHPh1"></keygen>




        <optgroup class="NLqCdkQ"><b id="WzQhiNg" class="WF0pao5"><blockquote class="nyES8dp"></blockquote></b></optgroup>