首页 > 编程语言 >C++ 初始化列表

C++ 初始化列表

时间:2023-10-04 12:13:47浏览次数:34  
标签:Test1 初始化 Test2 C++ t1 列表 构造函数

何谓初始化列表

与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。在C++中,struct和class的唯一区别是默认的访问性不同,而这里我们不考虑访问性的问题,所以下面的代码都以struct来演示。

struct foo
{
    string name ;
    int id ;
    foo(string s, int i):name(s), id(i){} ; // 初始化列表
};

构造函数的两个执行阶段

构造函数的执行可以分成两个阶段,初始化阶段和计算阶段,初始化阶段先于计算阶段。

初始化阶段

所有类类型(class type)的成员都会在初始化阶段初始化,即使该成员没有出现在构造函数的初始化列表中。

计算阶段

一般用于执行构造函数体内的赋值操作,下面的代码定义两个结构体,其中Test1有构造函数,拷贝构造函数及赋值运算符,为的是方便查看结果。Test2是个测试类,它以Test1的对象为成员,我们看一下Test2的构造函数是怎么样执行的。

复制代码
struct Test1
{
    Test1() // 无参构造函数
    { 
        cout << "Construct Test1" << endl ;
    }

    Test1(const Test1& t1) // 拷贝构造函数
    {
        cout << "Copy constructor for Test1" << endl ;
        this->a = t1.a ;
    }

    Test1& operator = (const Test1& t1) // 赋值运算符
    {
        cout << "assignment for Test1" << endl ;
        this->a = t1.a ;
        return *this;
    }

    int a ;
};

struct Test2
{
    Test1 test1 ;
    Test2(Test1 &t1)
    {
        test1 = t1 ;
    }
};
复制代码

调用代码

Test1 t1 ;
Test2 t2(t1) ;

输出

解释一下,第一行输出对应调用代码中第一行,构造一个Test1对象。第二行输出对应Test2构造函数中的代码,用默认的构造函数初始化对象test1,这就是所谓的初始化阶段。第三行输出对应Test1的赋值运算符,对test1执行赋值操作,这就是所谓的计算阶段。

 

https://www.clw9335.com/gl/

标签:Test1,初始化,Test2,C++,t1,列表,构造函数
From: https://www.cnblogs.com/zx8868/p/17742093.html

相关文章

  • C++ thread 互斥操作
    ThreadMutexstd::mutex是C++11最基本的互斥量,该类的实例化对象提供了资源独占所有权的特性,用于保护共享数据免受多个线程同时访问的同步原语。Mutex用法头文件#include<mutex>类型std::mutex最基础的Mutex类std::recursive_mutex递归的Mutex类std......
  • 关于Actor Component的思考--学习斯坦佛UE+C++
    跟着B站的视频学习,感觉自己的头很混乱。所以浅浅总结一下创建ActorComponent之后其的作用和相关操作。ActorComponent首先Component为一个组件,源码就是一个类的声明和类的实现。所以对其的操作就是对类的操作。可以在其源码内部定义一些物体属性,比如一个角色的Component。我们......
  • 鸿蒙JS UI的Hml语法技巧,hml中实现多列表的方式
    由于没有web基础,不懂html和js。需要从基础学起。刚刚学到在hml中实现多列表的方式,记录一下<divclass="container"><divclass="card-container"for="iteminimageCards"show="{{item.isShow}}"><divclass="text-container&......
  • Python 列表操作指南1
    Python列表mylist=["apple","banana","cherry"]列表用于在单个变量中存储多个项目。列表是Python中的4种内置数据类型之一,用于存储数据集合,其他3种分别是元组(Tuple)、集合(Set)和字典(Dictionary),它们具有不同的特性和用途。使用方括号创建列表:#创建一个列表thislist......
  • Python 列表操作指南2
    将元组的元素添加到列表中:thislist=["apple","banana","cherry"]thistuple=("kiwi","orange")thislist.extend(thistuple)print(thislist)remove()方法用于移除指定的项目。示例,移除"banana":thislist=["apple&quo......
  • 十四天学会C++之第二天(函数和库)
    1.函数的定义和调用在C++中,函数是组织和结构化代码的关键工具之一。它们允许您将一段代码封装成一个可重复使用的模块,这有助于提高代码的可读性和维护性。为什么使用函数?函数在编程中的作用不可小觑。它们有以下几个重要用途:模块化编程:函数允许将代码划分为小的、独立的单元,使得......
  • 自定义表单设计之三-表单列表实现
    代码实现-表单列表<htmlxmlns="http://www.w3.org/1999/xhtml"><headrunat="server"><title>表单列表</title></head><body><formid="formList"runat="server"><divalign=&......
  • C++ Thread 基础使用
    C++11Thread使用基础用法头文件#include<thread>函数初始化threadthread(<function_name>);线程分离thread.detach();线程阻塞thread.join()线程取消this_thread::yield();线程休眠this_thread::sleep_for(chrono::seconds(3));代码#in......
  • 列表与字典学习笔记
    python中要想用对象做某种处理,需要这个对象的名字(变量名),然后是一个点,再后面是要对对象做的操作。如要向friends列表zhui追加一个元素,就要写成:friends.append(something)列表:列表可以包含python能存储的任何类型的数据(数字,字符串、对象,甚至其他列表)列表中的元素并不要求元素是......
  • C++特种成员函数生成机制及相关原则
    C++特种成员函数生成机制及相关原则注:默认C++标准是C++11及以后的标准,因为C++11之前的标准定义的默认成员函数不包含移动构造函数和移动赋值运算符1.C++默认成员函数默认成员函数的定义:类中没有显示声明,在需要时由编译器自动生成的函数,包括默认构造函数、默认析构函数、......