码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-04-06 17:45:39      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:string   拷贝构造   ret   ons   item   函数   分配   ack   using   

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

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

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

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

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

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 }

 

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

标签:string   拷贝构造   ret   ons   item   函数   分配   ack   using   

原文地址:https://www.cnblogs.com/yh2924/p/12642844.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!