前天晚上幫大家複習C+_+,當時在講函數重載的時候羊說錯了一點。那就是Copy Constructor其實是可以重載的。
當時緣起是一道考試題,然後就忘了怎麼講到這個的。那時候我還在想這個問題,不過我還是這麼告訴別人了。今天再想了一會兒,覺得不妥,然後查閱了一番,發現Copy Constructor也是可以重載的。
在運用template的時候,我們有時候是需要在“複製一個對象”的時候,完成一次“隱式類型轉換”,這時候就要用到template copy constructor了。比如說,你可能在有時候需要將int拷貝出一份double型的數據,或者使用C-字符串char *類型的字符串轉換成一個C++ std::string類型的字符串等等。
舉例如下:
#include <cstdio> template <typename T> class Test { public: Test() { fprintf(stdout, "Here in Constructor "); fprintf(stdout, "%p\n", this); }// default constructor Test(const Test<T> & rhs) { fprintf(stdout, "Here in copy constructor - standard version "); fprintf(stdout, "%p cp from %p\n", this, &rhs); }// copy constructor template <typename AnotherType> Test(const Test<AnotherType> & rhs) { fprintf(stdout, "Here in copy constructor - template version "); fprintf(stdout, "%p cp from %p\n", this, &rhs); }// template copy constructor ~Test() {} };// class Test int main() { Test<int> t1; Test<int> t2(t1); Test<double> t3(t1); return 0; }//main
運行結果爲:
Here in Constructor 0x7fff9d64a808 Here in copy constructor - standard version 0x7fff9d64a800 cp from 0x7fff9d64a808 Here in copy constructor - template version 0x7fff9d64a7f0 cp from 0x7fff9d64a808