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

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

初始化列表

作用: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月前
|
搜索推荐
如何在构造函数中为类的实例添加方法?
在实际开发中,要根据具体的场景和需求来选择合适的方式来为类的实例添加方法,以确保代码的可读性、可维护性和性能。
|
1月前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
126 4
|
安全 编译器 C++
[C++] 类与对象(中)类中六个默认成员函数(1)上
[C++] 类与对象(中)类中六个默认成员函数(1)上
|
存储 编译器 C++
[C++] 类与对象(中)类中六个默认成员函数(1)下
[C++] 类与对象(中)类中六个默认成员函数(1)下
方法引用符、引用类方法、引用对象的实例方法、引用类的实例方法及引用构造器
方法引用符、引用类方法、引用对象的实例方法、引用类的实例方法及引用构造器
100 0
|
安全 编译器 C++
【C++要笑着学】类的默认成员函数详解 | 构造函数 | 析构函数 | 构造拷贝函数(二)
朋友们好啊,今天终于更新了。我是柠檬叶子C,本章将继续讲解C++中的面向对象的知识点,本篇主要讲解默认成员函数中的构造函数、析构函数和拷贝构造函数。还是和以前一样,我们将由浅入深地去讲解,以 "初学者" 的角度去探索式地学习。会一步步地推进讲解,而不是直接把枯燥的知识点倒出来,应该会有不错的阅读体验。如果觉得不错,可以 "一键三连" 支持一下博主!你们的关注就是我更新的最大动力!Thanks ♪ (・ω・)ノ
106 0
【C++要笑着学】类的默认成员函数详解 | 构造函数 | 析构函数 | 构造拷贝函数(二)
|
编译器 C++
【C++要笑着学】类的默认成员函数详解 | 构造函数 | 析构函数 | 构造拷贝函数(一)
朋友们好啊,今天终于更新了。我是柠檬叶子C,本章将继续讲解C++中的面向对象的知识点,本篇主要讲解默认成员函数中的构造函数、析构函数和拷贝构造函数。还是和以前一样,我们将由浅入深地去讲解,以 "初学者" 的角度去探索式地学习。会一步步地推进讲解,而不是直接把枯燥的知识点倒出来,应该会有不错的阅读体验。如果觉得不错,可以 "一键三连" 支持一下博主!你们的关注就是我更新的最大动力!Thanks ♪ (・ω・)ノ
139 0
【C++要笑着学】类的默认成员函数详解 | 构造函数 | 析构函数 | 构造拷贝函数(一)
|
设计模式
单子设计模式 (对创建初始对象为静态,构造函数私有,返回值为对象的创建函数,private应用)
单子设计模式 (对创建初始对象为静态,构造函数私有,返回值为对象的创建函数,private应用)
单子设计模式 (对创建初始对象为静态,构造函数私有,返回值为对象的创建函数,private应用)
第五周学习java 继承 在子类父类中有相同参数,子类继承分类后如何进行调用,判断创建的对象属性哪个类
第五周学习java 继承 在子类父类中有相同参数,子类继承分类后如何进行调用,判断创建的对象属性哪个类
第五周学习java 继承 在子类父类中有相同参数,子类继承分类后如何进行调用,判断创建的对象属性哪个类