初始化列表:
作用:
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; }