类初始列表和类对象作为类成员

简介: 类初始列表和类对象作为类成员

初始化列表

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

构造函数():属性1(值1),属性2(值2).....{   }
传统初始化操作:
#include
using namespace std;
class Person
{
    
public:
    //传统初始化操作
    Person(int a, int b, int c)
    {
    
        m_A = a;
        m_B = b;
        m_C = c;
    }
    int m_A;
    int m_B;
    int m_C;
};
int main()
{
    
    Person a(10, 30, 10);
    cout << "a = " << a.m_A << endl;
    cout << "b = " << a.m_B << endl;
    cout << "c = " << a.m_C << endl;
    system("pause");
    return 0;
}

初始化列表:

#include
using namespace std;
class Person
{
    
public:
    Person(int a,int b,int c) :m_A(a), m_B(b), m_C(c)  //初始化列表
    {
    

    }
    int m_A;
    int m_B;
    int m_C;
};
int main()
{
    
    Person a(30,20,10);
    cout << "a = " << a.m_A << endl;
    cout << "b = " << a.m_B << endl;
    cout << "c = " << a.m_C << endl;
    system("pause");
    return 0;
}

类对象作为类成员

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

class A{
     };
class B
{
    
        A a;
};

B类中有对象A作为成员,A为对象成员

那么创建B时,A和B的构造函数和析构顺序是谁先谁后呢?

#include
#include
using namespace std;
class Phone
{
    
public:
    Phone(string Pname)
    {
    
        m_Pname = Pname;
        cout << "调用Phone的构造函数" << endl;
    }
    ~Phone()
    {
    
        cout << "调用Phone的析构函数" << endl;
    }
    string m_Pname;
};
class Person
{
    
public:
    Person(string name,string Pname):m_name(name),m_phone(Pname)//隐式转换法
    {
    
        cout << "调用Person的构造函数" << endl;
    }
    ~Person()
    {
    
        cout << "调用Person的析构函数" << endl;
    }
    string m_name;
    Phone m_phone;

};
int main()
{
    
    Person p("张三", "小米11");
    cout << p.m_name << ":" << p.m_phone.m_Pname << endl;
    return 0;
}

执行结果如下:

在这里插入图片描述
结论:

当其他类的对象作为本类成员,
构造时先构造其他类的对象,在构造自身
析构时先析构自身,再析构其他类对象
相关文章
|
1月前
|
存储 算法 搜索推荐
【C++】类的默认成员函数
【C++】类的默认成员函数
|
4月前
|
编译器 C语言 C++
类的6个默认成员函数(上)
类的6个默认成员函数(上)
27 0
|
安全 编译器 C++
[C++] 类与对象(中)类中六个默认成员函数(1)上
[C++] 类与对象(中)类中六个默认成员函数(1)上
|
4月前
|
编译器 C++
C++:类的默认成员函数
C++:类的默认成员函数
56 0
|
4月前
|
C语言
C11中类成员变量定义时初始化问题
C11中类成员变量定义时初始化问题
58 0
|
存储 编译器 C++
[C++] 类与对象(中)类中六个默认成员函数(1)下
[C++] 类与对象(中)类中六个默认成员函数(1)下
|
编译器 C++
【C++】类的6个默认成员函数详解(上)
【C++】类的6个默认成员函数详解
142 0
|
编译器 C++
【C++】类的6个默认成员函数详解(下)
【C++】类的6个默认成员函数详解(下)
82 0
|
安全 编译器 C++
【C++要笑着学】类的默认成员函数详解 | 构造函数 | 析构函数 | 构造拷贝函数(二)
朋友们好啊,今天终于更新了。我是柠檬叶子C,本章将继续讲解C++中的面向对象的知识点,本篇主要讲解默认成员函数中的构造函数、析构函数和拷贝构造函数。还是和以前一样,我们将由浅入深地去讲解,以 "初学者" 的角度去探索式地学习。会一步步地推进讲解,而不是直接把枯燥的知识点倒出来,应该会有不错的阅读体验。如果觉得不错,可以 "一键三连" 支持一下博主!你们的关注就是我更新的最大动力!Thanks ♪ (・ω・)ノ
89 0
【C++要笑着学】类的默认成员函数详解 | 构造函数 | 析构函数 | 构造拷贝函数(二)
|
编译器 C++
【C++要笑着学】类的默认成员函数详解 | 构造函数 | 析构函数 | 构造拷贝函数(一)
朋友们好啊,今天终于更新了。我是柠檬叶子C,本章将继续讲解C++中的面向对象的知识点,本篇主要讲解默认成员函数中的构造函数、析构函数和拷贝构造函数。还是和以前一样,我们将由浅入深地去讲解,以 "初学者" 的角度去探索式地学习。会一步步地推进讲解,而不是直接把枯燥的知识点倒出来,应该会有不错的阅读体验。如果觉得不错,可以 "一键三连" 支持一下博主!你们的关注就是我更新的最大动力!Thanks ♪ (・ω・)ノ
118 0
【C++要笑着学】类的默认成员函数详解 | 构造函数 | 析构函数 | 构造拷贝函数(一)