美文网首页
构造函数的使用位置与特点

构造函数的使用位置与特点

作者: 淇漯草 | 来源:发表于2020-09-13 16:10 被阅读0次

构造了9个例子,基本应该覆盖了所有情况,其中编译器如何进行优化的,也做了部分探索。

普通构造函数

造出来什么样就什么样。

拷贝构造函数

1.用同类初始化。
2.传入参数。
3.返回参数。

优化特征 NRV(在测试点9中,返回的参数==传入的参数,所以同时存在 2、 3,两次拷贝构造函数的调用)

返回的参数!=传入的参数-->不调用拷贝构造函数(利用内部的普通构造函数的值即可)

赋值构造函数

已经存在的类,用另一个类进行处理。
PS:说是赋值构造函数,实际上就是clone函数。所以在传参的时候

#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>
#include <map>
#include <stack>
using namespace std;

// 拷贝构造函数
// 赋值构造函数
// 构造函数
// 析构函数
class Solution{
public:
    Solution(){
        cout << "默认构造函数" << endl;
    }
    Solution(const Solution &rhs){
        data = rhs.data;
        cout << "拷贝构造函数" << endl;
    }
    Solution& operator=(const Solution &rhs){
        data = rhs.data;
        cout << "赋值构造函数" << endl;
        return *this;
    }
    ~Solution(){
        // cout << data << endl;
        cout << "析构函数" << endl;
    }
public:
    string data;
};

// 用于测试传入参数
void my_func1(Solution temp){
    ;
}

// 用于测试返回值
Solution my_func2(){
    Solution other;
    other.data = "func2";
    return other;
}

Solution my_func3(Solution &s){
    return s;
}

Solution my_func4(Solution s){
    return s;
}

int main()
{
    cout << "测试1:默认构造函数" << endl;
    Solution a;
    cout << "测试2:拷贝构造函数测试点1,显式初始化" << endl;
    Solution b(a);
    cout << "无用测试:默认构造函数" << endl;
    Solution c;
    cout << "测试3:赋值构造函数" << endl;
    c = b;
    c.data = "原来的c";

    cout << "测试4:拷贝构造函数测试点2,函数传入参数" << endl;
    my_func1(c);
    cout << "测试5:拷贝构造函数测试点3,返回值。" << endl;
    my_func2();
    cout << "测试6:拷贝构造函数测试点4,返回值,返回到一个未初始化的值。(结果是赋值构造函数)" << endl;
    Solution d = my_func2();
    cout << "测试7:拷贝构造函数测试点5,返回值,返回到一个已初始化的值,增加一个赋值构造函数" << endl;
    c = my_func2();
    cout << "测试8:传入引用,返回(以引用为结果的非引用)。调用拷贝构造函数。" << endl;
    my_func3(c);
    cout << "测试9:传入正常,返回正常。调用拷贝构造函数(两次)(传入一次、传出一次)。" << endl;
    my_func4(c);
    cout << "结束" << endl;
    return 0;
}
测试结果

相关文章

  • 构造函数的使用位置与特点

    构造了9个例子,基本应该覆盖了所有情况,其中编译器如何进行优化的,也做了部分探索。 普通构造函数 造出来什么样就什...

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

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

  • 原型与原型链

    构造函数与原型 JavaScript 语言使用构造函数(constructor)作为对象的模板。所谓”构造函数”,...

  • java面向对象——构造函数

    当使用new来创建一个对象的时候,其实是调用了一个函数,这个函数的名称叫做构造函数 构造函数的特点: 1.构造函数...

  • Swift基础语法-类的构造函数

    本节知识点 构造函数的介绍 构造函数的基本使用 自定义构造函数 属性与构造函数 1. 构造函数的介绍 构造函数类似...

  • js的面向对象

    构造函数 构造函数的特点有两个: 函数体内部使用了this关键字,代表了所要生成的对象实例。 生成对象的时候,必须...

  • C++: 类(下)

    构造函数 定义:构造函数(也叫构造器),在对象创建的时候自动调用,一般用于完成对象的初始化工作 特点: 函数名与类...

  • Kotlin学习笔记——基础语法篇之类和对象

    类的构造 Kotlin类的写法 Kotlin类的构造函数分为主构造函数和二级构造函数 主构造函数的特点——函数名为...

  • 箭头函数

    箭头函数 特点:1、this指向离自己最近的外层作用域的对象;2、不能当做构造函数使用(箭头函数是匿名函数,没有函...

  • Kotlin反射(4)调用构造函数

      通过反射调用构造函数与调用普通函数类似。通过反射调用构造函数也是使用 KFunction 实例,KFuncti...

网友评论

      本文标题:构造函数的使用位置与特点

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