0
点赞
收藏
分享

微信扫一扫

【C++】谈谈初始化列表

人间四月天i 2022-03-11 阅读 133

前言

1.成员变量初始化的方式

拿一段AVL树的树节点代码来看看

我们知道初始化类的成员变量,有几种方法

  • 在构造函数内部初始化
template<class K, class V>
struct AVLTreeNode{
	pair<K, V> _kv;
	int _bf; // balance factor = h(subRight) - h(subLeft)
	AVLTreeNode<K, V>* _parent;
	AVLTreeNode<K, V>* _left;
	AVLTreeNode<K, V>* _right;
	
AVLTreeNode(const pair<K, V>& kv) {
	_kv = kv;
	_bf = 0;
	_parent = nullptr;
	_left = nullptr;
	_right = nullptr;
};
  • 给缺省值
template<class K, class V>
struct AVLTreeNode{
	pair<K, V> _kv = kv;
	int _bf = 0; // balance factor = h(subRight) - h(subLeft)
	AVLTreeNode<K, V>* _parent = nullptr;
	AVLTreeNode<K, V>* _left = nullptr;
	AVLTreeNode<K, V>* _right = nullptr;

	AVLTreeNode(const pair<K, V>& kv)
	{}
};
  • 初始化列表
```cpp
template<class K, class V>
struct AVLTreeNode{
	pair<K, V> _kv;
	int _bf; // balance factor = h(subRight) - h(subLeft)
	AVLTreeNode<K, V>* _parent;
	AVLTreeNode<K, V>* _left;
	AVLTreeNode<K, V>* _right;

	AVLTreeNode(const pair<K, V>& kv)
		:_kv(kv)
		,_bf(0)
		,_parent(nullptr)
		,_left(nullptr)
		,_right(nullptr)
	{}
};

2.初始化列表的注意点、优势

1.每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次)

2.类中包含以下成员,必须放在初始化列表位置进行初始化:

  • 引用成员变量
  • const成员变量
  • 自定义类型成员(该类没有默认构造函数)
class A
{
public:
	A(int a)
		:_a(a)
	{}
private:
	int _a;
};
class B
{
public:
	B(int a, int ref)
		:_aobj(a)
		,_ref(ref)
		,_n(10)
	{}
private:
	A _aobj; // 没有默认构造函数
	int& _ref; // 引用
	const int _n; // const
};

优势:

举报

相关推荐

0 条评论