Code:
#include <iostream>
using namespace std;
class A {
public:
A(int& k):a(k){ // 必须要在初始化列表中进行初始化
cout << a <<endl;
}
int getVal() const {
return a;
}
public:
int &a;
};
int main(){
int b =10;
A a(b);
cout << a.getVal() <<endl;
b++;
cout << a.getVal() <<endl;
cout << &(a.a) << " " << &b << endl;
return 0;
}
引用类型的成员变量初始化需要在初始化列表中进行,类似于常量成员变量。
因为引用就是别名,所以可以看到a.a 和b的地址是相同的。
下面是错误代码,错误在于对a进行初始化时,使用的不是引用类型,A.a和其期望的A外部的引用没有连接上。
class A {
public:
A(int k):a(n){ // 必须要在初始化列表中进行初始化
n = k;
cout << a <<endl;
}
int get() const {
return n+1;
}
private:
int n;
int &a;
};