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

Posted zpchcbd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习:类和对象——初始化列表和内部类相关的知识,希望对你有一定的参考价值。

初始化列表:

作用:

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;
}

以上是关于学习:类和对象——初始化列表和内部类的主要内容,如果未能解决你的问题,请参考以下文章

C++类和对象下

类和对象

片段内部静态类和gradle问题

深入类和对象

C++从青铜到王者第四篇:C++类和对象(下篇)

java学习对象,过程,类