zoukankan      html  css  js  c++  java
  • 构造函数、拷贝构造函数、赋值运算符

    C++中构建一个对象,有多种方式,例如下面的Person类:

    class Person
    {
    public:
        Person(){};
        ~Person(){};
    };

    1.调用构造函数

    Person per1 = Person();

    2.调用拷贝构造函数,使用一个已有的对象创建:

    Person per1 = Person();
    Person per2 = Person(per1);

    3.使用赋值运算符,将一个已有的对象赋值给另一个对象:

    Person per1 = Person();
    Person per2;
    per2 = per1;

    在用户没有定义的情况下,编译器会为任意一个类提供一个默认的。

    用户在定义类的时候,可以自己定义,也可以禁止生成拷贝构造函数、赋值运算符,禁止以后,在代码中就无法使用了:

    class Person
    {
    public:
        Person(){};
        ~Person(){};
        Person(const Person &p) = delete; //禁止生成拷贝构造函数
        Person & operator = (const Person & p) = delete; //禁止生成赋值运算符
    };
    void main()
    {
    Person per1 = Person();
    Person per2 = Person();
    per1 = per2;//错误
    Person per3 = Person(per1)//错误
    }

    调用的场合:

    void f1(Person p)
    {
        return;
    }
    Person f2()
    {
        Person per1 = Person();
        return per1;
    }
    void main()
    {
        Person per1 = Person();    //默认构造函数
        Person per2;         //默认构造函数
        per2 = per1;         //赋值运算符
        Person per3 = per2;     //拷贝构造函数
        f1(per3);           //拷贝构造函数
        Person per4 = f2();     //拷贝构造函数
    }

    拷贝构造函数和赋值运算符有些相似,他们的区别是:

    拷贝构造函数是创建一个新的对象,赋值运算符是将对象赋值给一个已经存在的对象。

    二者的区别就在于被赋值的对象是否已经被初始化(是否已经存在)。

  • 相关阅读:
    Ubuntu设置默认编辑器
    Java基础学习之(15)
    Java基础学习之(9)--java的常用类
    Java基础学习之(11)--异常处理
    Java基础学习之(10)--接口
    Java基础学习之(8)--多态和抽象类
    Java基础学习之(7)--Object类
    Java基础学习之(6)--继承、访问权限、重写
    dubbo-整合springboot、基于注解的简单实例
    java安全框架之Permission学习笔记
  • 原文地址:https://www.cnblogs.com/hosseini/p/15093733.html
Copyright © 2011-2022 走看看