学习:类和对象——初始化列表和内部类

初始化列表:

作用:

C++提供了初始化列表语法,用来初始化属性

自己感觉比较好理解,就简单了几行代码吧,但是在类中存储类的时候使用还是需要注意下的

一个简单的示例

#include<iostream>
#include<string>

using namespace std;

class Person{
public:
	Person() {
		cout << "无参构造" << endl;
	}

	Person(int a, int b,int c): m_a(a),m_b(b),m_c(c) { 
		cout << "有参构造" << endl;
		cout << m_a << m_b << m_c << endl;
	}

private:
	int m_a;
	int m_b;
	int m_c;
};

int main() {
	Person p1(1, 2, 3);
	system("pause");
	return 0;
}

类对象作为类成员:

刚面提到的注意点其实也就是在这里了

C++类中的成员可以是另一个类的对象,我们称该成员为 对象成员

这里代码的话直接copy老师的了哈

这里需要注意的是类中包含类的时候构造函数析构函数调用的顺序,先调用内部类的构造方法然后再调用外部类的构造方法,然后对于析构方法的调用顺序是相反的,先是外部类析构方法调用,然后再是内部类析构方法的调用

#include<iostream>
#include<string>

using namespace std;

class Phone
{
public:
	Phone(string name)
	{
		m_PhoneName = name;
		cout << "Phone构造" << endl;
	}

	~Phone()
	{
		cout << "Phone析构" << endl;
	}

	string m_PhoneName;

};


class Person
{
public:

	//初始化列表可以告诉编译器调用哪一个构造函数
	Person(string name, string pName) :m_Name(name), m_Phone(pName)
	{
		cout << "Person构造" << endl;
	}

	~Person()
	{
		cout << "Person析构" << endl;
	}

	void playGame()
	{
		cout << m_Name << " 使用" << m_Phone.m_PhoneName << " 牌手机! " << endl;
	}

	string m_Name;
	Phone m_Phone;

};
void test01()
{
	//当类中成员是其他类对象时,我们称该成员为 对象成员
	//构造的顺序是 :先调用对象成员的构造,再调用本类构造
	//析构顺序与构造相反
	Person p("张三", "苹果X");
	p.playGame();

}


int main() {

	test01();

	system("pause");

	return 0;
}
posted @ 2019-11-14 22:44  zpchcbd  阅读(304)  评论(0编辑  收藏  举报