美文网首页C++
c++构造函数

c++构造函数

作者: Kai_Z | 来源:发表于2018-03-05 11:28 被阅读4次

简介

目前C++标准已经发展到C++17,随着右值引用等相关内容的加入,C++中的构造函数也逐渐丰富,在开始后面的章节之前,需要先记住如下几个术语:

  • 默认构造函数
  • 带参数构造函数
  • 拷贝构造函数
  • 拷贝赋值运算符
  • 移动构造函数
  • 移动赋值运算符
    后续先实现一个简单的类,大概讲解一下这些构造函数,后面通过这些知识点分析vector的构造函数。
// test.h
//后文中会逐步定义每个构造函数
class Test
{
    public:
        Test();      // 默认构造函数
        Test(int value);    // 初始化构造函数
        Test(const Test& value);    // 拷贝构造函数
        Test& operator=(const Test& value);  // 拷贝赋值运算符
        Test(Test&& value);    // 移动构造函数
        Test& operator=(Test&& value);    //移动赋值运算发
        ~Test();
    private:
        int num;
}

默认构造函数

什么是默认构造函数?
在c++中,默认构造函数是不带参数的构造函数或者所有的形参都提供了默认实参的构造函数。

//test.cpp
Test::Test()
{
      num = 0;
}

带参数构造函数

所谓带参数的构造函数是指在创建对象的时候,需要显示的提供参数。

//test.cpp
Test::Test(int value):num(value)
{
}

拷贝构造函数

什么是拷贝构造函数?
拷贝构造函数是基于同一类型的其他对象来创建及初始化一个新的对象,其第一个参数必须是该类型的左值引用。

//test.cpp
Test::Test(Test& value)
{
        num = value.num;
}

拷贝赋值运算符

一般情况下,当我们显示的定义了 拷贝构造函数 时,我们会同时定义相应的拷贝赋值运算符

什么是拷贝赋值运算符?
在c++中,=被称为赋值运算符,赋值运算符左右两次的对象为相同的类型,通过定义相应的拷贝赋值运算符,可以正确的完成对象间的赋值。
ps:可能读到这里会有点糊涂,但是可以先记着有这个东西,后面在详细讲解这个存在的意义

//test.cpp
Test& operator=(const Test& value)
{
        num = value.num;
        return *this;
}

移动构造函数

随着C++11对右值引用的支持,移动构造函数借助右值引用被实现。
什么是移动构造函数?
移动构造函数通过一个接管一个临时对象的资源来创建一个新的对象。

Test::Test(Test&& value)
{
        num = value.num;
}

移动赋值运算符

一般情况下当我们定义了移动构造函数时,同样也会定义移动赋值运算符。

什么是移动赋值运算符?
移动赋值运算符完成的工作与移动构造函数相同。

Test& operator=(Test&& value)
{
        num = value.num;
        return *this;
}

相关文章

  • windows逆向3

    VC 程序内存和编译的一些特征C++ 构造函数C++ 成员函数C++ 析构函数C++ 全局对象的构造C++ 全局对...

  • C++ 构造过程

    构造函数 C++中每个类必须有一个构造函数,如果用户没有自行编写构造函数,则C++会自动提供一个无参数的构造函数,...

  • C++:面向对象基础

    构造函数 C++中有三种构造函数:默认构造函数,有参构造函数,拷贝构造函数 类对象的初始化 括号法//默认构造函数...

  • [C++之旅] 10 构造函数

    [C++之旅] 10 构造函数 构造函数的特点 构造函数在对象实例化时被自动调用 构造函数与类同名 构造函数没有返...

  • scala学习笔记-构造函数

    scala的构造函数分为主构造函数和辅助构造函数 【辅助构造函数】比较容易理解,它们同C++和Java的构造函数十...

  • c++面向对象-构造、析构、初始化列表

    构造函数 构造函数是指创建对象的时候,会调用的函数。C++构造函数可以重载,指针或者对象均可调用构造函数。 析构函...

  • C++基础③new对象,继承,友元函数,函数的可变参数

    接续上篇C++基础②构造函数,析构函数,拷贝构造函数 前言 C++是一门面向对象的编程语言 , 创建用以创建对象 ...

  • C++ 构造函数,类的成员变量

    c++ 05 构造函数无参构造函数有参构造函数 拷贝构造函数 浅拷贝 深拷贝 类的成员变量 四类特殊的成员变量

  • [字符串] 自己实现一个string类(一)

    C++类一般包括:构造函数,拷贝构造函数,赋值构造函数和析构函数四大函数。 在上面的赋值构造函数中,都是先dele...

  • C++拷贝构造函数——难点

    拷贝构造函数 - C++详细 | 编程字典

网友评论

    本文标题:c++构造函数

    本文链接:https://www.haomeiwen.com/subject/jjncfftx.html