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

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

初始化列表

作用: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;
}

执行结果如下:

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

当其他类的对象作为本类成员,
构造时先构造其他类的对象,在构造自身
析构时先析构自身,再析构其他类对象
相关文章
|
3天前
|
搜索推荐
如何在构造函数中为类的实例添加方法?
在实际开发中,要根据具体的场景和需求来选择合适的方式来为类的实例添加方法,以确保代码的可读性、可维护性和性能。
|
11天前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
35 4
通过构造方法使属性初始化
通过构造方法使属性初始化
106 0
|
设计模式
单子设计模式 (对创建初始对象为静态,构造函数私有,返回值为对象的创建函数,private应用)
单子设计模式 (对创建初始对象为静态,构造函数私有,返回值为对象的创建函数,private应用)
单子设计模式 (对创建初始对象为静态,构造函数私有,返回值为对象的创建函数,private应用)
第五周学习java 继承 在子类父类中有相同参数,子类继承分类后如何进行调用,判断创建的对象属性哪个类
第五周学习java 继承 在子类父类中有相同参数,子类继承分类后如何进行调用,判断创建的对象属性哪个类
第五周学习java 继承 在子类父类中有相同参数,子类继承分类后如何进行调用,判断创建的对象属性哪个类
C#(十六)之C#类中的成员属性 构造函数 析构函数
本篇内容记录了成员属性、构造函数、析构函数的一些基本用法。
301 0
C#(十六)之C#类中的成员属性 构造函数 析构函数
|
Java 数据库
java反射机制查找类的属性并赋值
先说一下需求:最近做一个项目其中需要将前台传来的数组存到数据库,但是这个表里有15个字段,集合是不固定的,然后要把这个集合的数值赋给这个类的相应属性,然后存到数据库中。集合长度应小于等于这个类属性的个数。
329 0
|
JavaScript 前端开发
证明函数是对象的特殊子类型和函数的对象属性
证明函数是对象的特殊子类型和函数的对象属性
|
Java
构造器、对象数组、对象属性、静态实例块、this关键字
它的名字:构造函数、构造方法、初始化方法。 构造条件? 以后我们如何去使用构造器? 你觉得那些对象中那些属性值是必要的,你就在构造器中提出来(就是你如果想创造对象必须要传入我所需要的参数) public class Dog {//这里就是一个简单的类、狗的类 String name; .
1168 0