物件的「生命週期」管理意味著完全地控制物件的誕生、繁殖和消亡的過程。使用拷貝建構函式和賦值運算子,可以更快的進行物件的繁殖操作。
拷貝建構函式是一種建構函式,其原型類似於:
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 這個程...
拷貝建構函式和賦值運算子
把引數傳遞給函式有三種方法,一種是值傳遞,一種是傳位址,還有一種是傳引用。前者與後兩者不同的地方在於 當使用值傳遞的時候,會在函式裡面生成傳遞引數的乙個副本,這個副本的內容是按位從原始引數那裡複製過來的,兩者的內容是相同的。當原始引數是乙個類的物件時,它也會產生乙個物件的副本,不過在這裡要注意。一般...