码迷,mamicode.com
首页 > 其他好文 > 详细

当一个非静态的成员是常量或是引用类型时,需要怎么样初始化它们

时间:2014-09-19 22:20:56      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:style   color   io   os   strong   数据   sp   代码   on   

const int a ;//此句代码是错误的,因为const修饰的a必须要在定义的时候初始化。

int &a;//同理,也是错的,在定义的时候必须要初始化,其他类型的数据也是一样。

那么如果一个类的成员有非静态const类型,或者引用类型时,该怎么初始化呢?

#include<iostream>
using namespace std;
class A {
  public:
 const int a;
  A (int t){
    a=t;
   }
};
int main(){
  A b(3);//error,因为调用构造函数A(int t)时,相当于把t赋值给常量a,这是不允许的。编译器报错: "错误:向只读成员‘A::a’赋值";

  cout<<b.a<<endl;
  return 0;
}

因为A类中有const int a只读成员,所以在定义一个A类的对象时,必须要初始化对象中的只读成员。

那么我们只有修改构造函数了

A (int t){
    a=t;
   }修改成:

A(int t):a(t){}这里用初始化取代了赋值;编译能够通过。

 

普通的成员变量也可以进行这种初始化

成员名(表达式)

但是const只读类型以及引用类型必须用这种成员名(表达式)初始化。

 

对于引用类型,同const类型一样的道理,这里就不予讨论了。

 

当一个非静态的成员是常量或是引用类型时,需要怎么样初始化它们

标签:style   color   io   os   strong   数据   sp   代码   on   

原文地址:http://www.cnblogs.com/coder-j/p/3982549.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!