亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

c++中拷貝構造函數和賦值運算符重載本質上一樣么

c++中拷貝構造函數和賦值運算符重載本質上一樣么

C++
繁花如伊 2019-04-08 04:04:10
c++中拷貝構造函數和賦值運算符重載本質上一樣么
查看完整描述

4 回答

?
滄海一幻覺

TA貢獻1824條經驗 獲得超5個贊

本質不一樣,語法上也不一樣


他們的區別:

  1. 拷貝構造函數是在一堆原始的內存上建立起一個對象。

  2. 復制運算符重載是在已初始化的對象上進行復制。


查看完整回答
反對 回復 2019-04-09
?
拉風的咖菲貓

TA貢獻1995條經驗 獲得超2個贊

復制構造函數接受單個類類型引用形參,這個形參一般用const修飾。
class A
{ public:
A();;
A(const A&);
//.........
};
一般的類,編譯器合成的構造函數就能完成必要的工作。擔當類有一個數據成員是指針,或者成員表示在構造函數中分配的其他資源;在創建新對象時必須做一些特定工作。這兩種情況必須定義復制構造函數。

復制操作符重載,由operator后面跟所定義的操作符符號,通過定義名為operator=函數來對賦值進行定義。該操作符函數有兩個形參:第一個形參對應左邊的操作數(隱式綁定到this指針了),第二個形參對應右操作數。返回類型應該與內置賦值運算返回的類型相同,內置類型的賦值運算返回對右操作數的引用,賦值操作符也返回對同一類型的引用。
class B
{
public:
B& operator=(const B &);
};

可以使用合成復制構造函數的類通常也可以使用合成賦值操作符。一般來說,如果類需要復制構造函數,也就需要賦值操作符。



查看完整回答
反對 回復 2019-04-09
?
喵喔喔

TA貢獻1735條經驗 獲得超5個贊

形式上不一樣,本質一樣
都是為了防止,淺拷貝帶來的錯誤
用的時機不懂
既然是構造函數,所以就是在初始化使用的, 重載賦值操作符就是賦值時用的

查看完整回答
反對 回復 2019-04-09
?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

假設你有一個類A,和一個已有的類對象b時
當你執行A a=b來創建對象a時調用的是拷貝構造函數,
當你執行A a;a=b時調用的是運算符重載
就功能而言,感覺差別不大

查看完整回答
反對 回復 2019-04-09
  • 4 回答
  • 0 關注
  • 817 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號