前言:
先来回答一个问题:C++类内可以定义引用数据成员吗?
答案是肯定的,但是必须通过构造函数初始化列表初始化类内的引用!!!
C++类内可以定义引用成员变量,但要遵循以下三个规则:
- 不能用默认构造函数初始化,必须提供构造函数来初始化引用成员变量。否则会造成引用未初始化错误。
- 构造函数的形参也必须是引用类型
- 不能在构造函数的函数体赋值(为什么不是说初始化呢?因为所有的成员变量都是在初始化列表中完成的),必须在初始化列表中进行初始化。
构造函数分为初始化和计算两个阶段,前者对应成员初始化链表,后者对应构造函数函数体。引用必须在初始化阶段,也即在成员初始化链表中完成,否则编译时会报错(引用未初始化)。
代码展示:
#include <iostream>
using namespace std;
class node
{
public:
node(int &target) :st(target)
{
cout << "lalala" << endl;
}
void printst()
{
cout << st << endl;
}
private:
int &st;
};
int main()
{
int op = 123;
node bk(op);
bk.printst();
return 0;
}