1.练习代码

#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;

class base
{
private:
	int m_i;
	int m_j;
public:
	base(int i) : m_j(i), m_i(m_j){}
	base() : m_j(0), m_i(m_j){}
	int get_i(){return m_i;}
	int get_j(){return m_j;}
};

int _tmain(int argc, _TCHAR* argv[])
{
	base obj(98);
	cout << obj.get_i() << endl;
	cout << obj.get_j() << endl;
	return 0;
}

2.关键点分析

2.1执行过程

#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;

class base
{
private:
	int m_i;
	int m_j;
public:
	base(int i) : m_j(i), m_i(m_j){} //错误点:m_i(m_j)导致m_i变量的值未知。
	//类初始化变量顺序,根据成员变量的生命顺序执行。
	//初始化m_i变量时,m_j变量还未初始化,值未知,导致m_i赋值出错
	base() : m_j(0), m_i(m_j){}
	int get_i(){return m_i;}
	int get_j(){return m_j;}
};

int _tmain(int argc, _TCHAR* argv[])
{
	base obj(98); //定义类的实例
	cout << obj.get_i() << endl; //打印m_i的值
	cout << obj.get_j() << endl; //打印m_j的值
	return 0;
}

2.2运行结果

【小练习】面向对象_成员变量1

相关文章: