美文网首页C/C++经验技巧总结
C++类中的引用成员和常量成员的初始化问题

C++类中的引用成员和常量成员的初始化问题

作者: XDgbh | 来源:发表于2018-03-21 21:51 被阅读4次

解决办法:使用初始化列表

如果一个类是这样定义的:

Class A
{
     public:
          A(int pram1, int pram2, int pram3);
     privite:
          int a;
          int &b;
          const int c; 
}

假如在构造函数中对三个私有变量进行赋值则通常会这样写:

A::A(int pram1, int pram2, int pram3)
{
     a=pram1;
     b=pram2;
     c=pram3;
}

但是,这样是编译不过的。因为常量和引用初始化必须赋值。所以上面的构造函数的写法只是简单的赋值,并不是初始化。

正确写法应该是:

A::A(int pram1, int pram2, int pram3):b(pram2),c(pram3)
{
     a=pram1;
}

采用初始化列表实现了对常量和引用的初始化。采用括号赋值的方法,括号赋值只能用在变量的初始化而不能用在定义之后的赋值。

凡是有引用类型的成员变量或者常量类型的变量的类,不能有缺省构造函数。默认构造函数没有对引用成员提供默认的初始化机制,也因此造成引用未初始化的编译错误。并且必须使用初始化列表进行初始化const对象、引用对象。

相关文章

  • C++ 哪几种情况必须用到初始化成员列表

    类的成员是常量成员初始化; 类的成员是对象成员初始化,而该对象没有无参构造函数; 类的成员为引用时。

  • C++类中的引用成员和常量成员的初始化问题

    解决办法:使用初始化列表 如果一个类是这样定义的: 假如在构造函数中对三个私有变量进行赋值则通常会这样写: 但是,...

  • c++学习笔记第五天

    一、c++中修饰类的const关键字 const 修饰类的成员变量,表示成员常量,不能被修改,同时它只能在初始化列...

  • C++11中的类数据成员初始化方法

    在 C++11 中, 类的数据成员可以在类声明中初始化: 非静态的数据成员 静态的常量表达式数据成员 静态的常量数...

  • C++11:构造函数及类的初始化

    C++11:初始化 C++11中成员变量的初始化主要包括三类变量: 普通成员变量 常量 静态变量 静态常量 普通成...

  • 7.6 类的静态成员

    7.6 类的静态成员 静态成员的特性 静态成员属于类,而不是对象。 类型可以是类对象、指针、引用、常量等。 静态成...

  • final和static final修饰成员变量的区别

    final称为常量,static final称为全局常量。 成员变量是随类初始化或对象初始化而初始化的。当类初始化...

  • C++中的成员变量和成员函数

    C++中的类有两个成分: (1)成员变量 成员变量按照作用域分为静态成员变量和非静态成员变量,C++中成员变量的默...

  • c++ python java

    c++ 初始化 C++类中成员变量的初始化有两种方式 - yu132563的专栏 - CSDN博客 C++ 变量初...

  • C++ const用法

    一 修饰类 C++中const修饰类主要包括3个部分:数据成员,成员函数,对象。 数据成员const 修饰类的成员...

网友评论

    本文标题:C++类中的引用成员和常量成员的初始化问题

    本文链接:https://www.haomeiwen.com/subject/dkinqftx.html