zoukankan      html  css  js  c++  java
  • C++:用成员初始化列表对数据成员初始化

    1、在声明类时,对数据成员的初始化工作一般在构造函数中用赋值语句进行。
    例如:

    class Complex{
     private:
            double real;
            double imag;
     public:
            Complex(double r,double i)    //声明构造函数原型
            {
              ...........
            }       
    };     
    Complex::Complex(double r,double i)     //在构造函数中用赋值语句对数据成员赋初值
    {
            real = r;
            imag = i;
    }

    2、另一种初始化数据成员的方法---用成员初始化列表来实现对数据成员的初始化
    带有成员初始化列表的构造函数的一般形式如下:

    类名::构造函数名([参数表]):[(成员初始化列表)]
    {
    构造函数体
    }
    成员初始化列表的一般形式为:
    数据成员名1(初始值1),数据成员名2(初始值2),...........
    例如:

    class Complex{
     private:
            double real;
            double imag;
     public:
            Complex(double r,double i)  //声明构造函数原型
            {
               .............
            }       
    }; 
    Complex::Complx(double r,double i):real(r),imag(i)//用形参r的值初始化数据成员real,用形参i的值初始化数据成员imag 
    {
    
    }    

    3、对于用const修饰的数据成员,或是引用类型的数据成员,是不允许在构造函数中用赋值
    语句直接赋值的,而是采用成员初始化列表对其进行初始化。

    例:用成员初始化列表对引用类型的数据成员和const修饰的数据成员初始化。

     #include<iostream> 
     using namespace std;
     class A{
       public:
             A(int x1):x(x1),rx(x),pi(3.14)    //用成员初始化列表对引用类型的数据成员rx和const修饰的数据成员pi初始化
             {
             
             }
             void print()
             {
                cout<<"x = "<<x<<" "<<"rx = "<<rx<<" "<<"pi = "<<pi<<endl; 
             } 
       private:
               int x;
             int &rx;             //rx是整型变量的引用 
             const double pi;     //pi是用const修饰的常量 
     };
     int main()
     {
      A a(10);
      a.print();
      return 0; 
     }

    例:  用成员初始化列表对数据成员进行初始化

    #include<iostream>
     using namespace std;
     class D{
      public:
            D(int i):mem2(i),mem1(mem2+1)  //用成员初始化列表对数据成员进行初始化 
            {
             cout<<"mem1:"<<mem1<<endl;
             cout<<"mem2:"<<mem2<<endl; 
            } 
      private:
            int mem1;
            int mem2;        
     }; 
     int main()
     {
     D d(15);
     return 0;
     }
     /*注意:规定数据成员是按照它们在类中声明的顺序进行初始化的,数据成员mem1应在mem2
     之前被初始化。因此,在mem2尚未初始化时,mem1使用“mem2+1”的来初始化,所得结果是
     随机的,而不是16。 
     */ 
  • 相关阅读:
    Spring注解
    [Exception Android 22]
    Android中Word转Html
    [Exception Android 20]
    POI-word转html
    【JS设计模式】装饰者模式
    C语言中的传值调用
    Spring Aop基础总结
    Android开发-状态栏着色原理和API版本号兼容处理
    9.12測试(二)——国际象棋
  • 原文地址:https://www.cnblogs.com/XYQ-208910/p/4912093.html
Copyright © 2011-2022 走看看