拷貝建構函式與賦值運算子

2021-07-24 20:27:31 字數 1609 閱讀 1863

物件的「生命週期」管理意味著完全地控制物件的誕生、繁殖和消亡的過程。使用拷貝建構函式和賦值運算子,可以更快的進行物件的繁殖操作。

拷貝建構函式是一種建構函式,其原型類似於:

classname(const classname& x);

賦值建構函式的作用就是建立乙個物件,該物件是同乙個類中已有物件的精確副本。

針對某個類的賦值運算子過載了符號=,其含義對特定的類都不相同。賦值運算子的乙個特殊版本的原型如下:

classname& operator= (const classname& x);

猜測一下**的列印輸出

//複製建構函式與賦值運算子

class fraction //常規建構函式

fraction(const fraction& other); //複製建構函式

fraction& operator= (const fraction& other); //複製賦值建構函式指過載=運算子的賦值函式

fraction multiply(fraction f2);

private:

int m_number,m_denom;

};fraction::fraction(const fraction &other)

:m_number(other.m_number),m_denom(other.m_denom)

fraction& fraction::operator =(const fraction& other)

return *this;

}fraction fraction::multiply(fraction f2)

int main()

程式輸出:

copy construct

copy construct

--------------------

symbol construct

--------------------

copy construct

multiply

copy construct

symbol construct

編譯器提供的版本

這裡需要知道一件事:如果去掉類定義中的拷貝建構函式或拷貝賦值運算子(或者都去掉),編譯器就會提供它們預設的版本。編譯器提供的預設版本是public型別的,對於類t的這些預設版本的原型如下

t::t(const t& other);

t& t::operator=(const t&other);

這兩個預設版本都會精確複製每乙個資料成員的值。對於其資料型別都為簡單型別或者值型別的型別,比如:int,double,qstring等。如果類有指標成員或物件成員,則需要同時編寫這個類特別設計的拷貝建構函式和賦值符號(=)建構函式。

如下原始碼為使用預設的拷貝建構函式和賦值符號建構函式。至於如果類有指標成員或物件成員。。。的這種條件沒有找到。

class

a int a_;

};int main()

拷貝建構函式與賦值運算子過載

拷貝建構函式 只有單個形參,該形參是對本類型別物件的引用 一般常用const修飾 在用已存在的類型別物件建立新物件時由編譯器自動呼叫。1.拷貝建構函式是建構函式的乙個過載形式 class date date const date d private int year int month int da...

拷貝建構函式與過載賦值運算子

注意 該作者部落格已遷移至 如果乙個建構函式的第乙個引數是自身類型別的引用,且任何額外的引數都有預設值,則此建構函式是拷貝建構函式。c premier裡的定義 拷貝建構函式應用的場景 預設拷貝建構函式 class ctest ctest void test ctest obj intmain 這個程...

拷貝建構函式和賦值運算子

把引數傳遞給函式有三種方法,一種是值傳遞,一種是傳位址,還有一種是傳引用。前者與後兩者不同的地方在於 當使用值傳遞的時候,會在函式裡面生成傳遞引數的乙個副本,這個副本的內容是按位從原始引數那裡複製過來的,兩者的內容是相同的。當原始引數是乙個類的物件時,它也會產生乙個物件的副本,不過在這裡要注意。一般...