• C++之复制构造函数和赋值操作符


    拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。拷贝构造函数通常用于:

    • 通过使用另一个同类型的对象来初始化新创建的对象。

    • 复制对象把它作为参数传递给函数。

    • 复制对象,并从函数返回这个对象。

    如果在类中没有定义拷贝构造函数,编译器会自行定义一个。如果类带有指针变量,并有动态内存分配,则它必须有一个拷贝构造函数。拷贝构造函数的最常见形式如下:

    classname (const classname &obj) { // 构造函数的主体 }

    在这里,obj 是一个对象引用,该对象是用于初始化另一个对象的。

     1 #include <iostream>
     2 #include <string>
     3 #include <vector>
     4 
     5 using namespace std;
     6 //复制构造函数和赋值操作符 如果不写C++会默认写一个
     7 
     8 class Sales_item
     9 {
    10 public:
    11     //普通的构造函数
    12     Sales_item():units_sold(0),revenue(0.0){}
    13     Sales_item(const string &book):
    14         ibsn(book),
    15         units_sold(0),
    16         revenue(0.0){}
    17     //复制构造函数 参数为类的引用
    18     Sales_item(const Sales_item &orig):
    19         ibsn(orig.ibsn),
    20         units_sold(orig.units_sold),
    21         revenue(orig.revenue)
    22         {
    23             cout<<"复制构造函数被调用了"<<endl;
    24         }
    25 
    26     //赋值操作符
    27     Sales_item &operator=(const Sales_item &rhs)
    28     {
    29         cout<<"赋值操作符被调用了"<<endl;
    30         ibsn=rhs.ibsn;
    31         units_sold=rhs.units_sold;
    32         revenue=rhs.revenue;
    33         return *this;
    34     }
    35 private:
    36     string ibsn;
    37     unsigned units_sold;
    38     double revenue;
    39 };
    40 
    41 int main()
    42 {
    43     Sales_item a;
    44     Sales_item b("0-12025-X");
    45     //复制构造函数被调用了
    46     Sales_item c(b);
    47     //赋值操作符被调用了
    48     a=b;
    49 
    50     cout<<"=========="<<endl;
    51     vector<Sales_item> icv(5);
    52     return 0;
    53 }

     析构函数:

    1 //析构函数 用于撤销对象
    2     //析构函数 没有参数
    3     ~NoName()
    4     {
    5     cout<<"析构函数被调用了"<<endl;
    6     delete pstring;
    7     }
  • 相关阅读:
    WebAssembly学习(四):AssemblyScript
    Ramda
    React—生命周期
    网络拓扑图
    手机端的meta信息
    面试题
    Bootstrap路径导航
    Bootstrap 分页翻页
    Bootstrap栅格系统
    Bootstrap 屏幕类型
  • 原文地址:https://www.cnblogs.com/yh2924/p/12642844.html
Copyright © 2020-2023  润新知