2012-04-09 33 views
2

我有一個SimpleCircle類。其聲明如下:用C++創建一個對象的副本

class SimpleCircle 
{ 
    public: 
SimpleCircle(); 
SimpleCircle(int rad); 
SimpleCircle(const SimpleCircle&); 
~SimpleCircle(); 

    SimpleCircle operator++(int); 
} 

在我使用的定義:

SimpleCircle SimpleCircle::operator++(int) 
{ 
    SimpleCircle temp(*this); 
    ++itsRadius; 
    return temp; 
} 

當我使用

SimpleCircle溫度(*此)

,是被調用的拷貝構造函數還是什麼?那裏發生了什麼?我沒有像

SimpleCircle(SimpleCircle newCircle)

或東西(除了拷貝構造函數等)

+2

是的,它調用複製構造函數。 – modelnine 2012-04-09 16:58:27

+1

'SimpleCircle(const SimpleCircle&);'是你的拷貝構造函數,它是被調用的。 – 2012-04-09 16:58:28

+0

您可以使用調試器確定程序行爲。 – 2012-04-09 16:59:28

回答

8

這確實調用拷貝構造函數構造的任何。雖然您沒有定義構造函數SimpleCircle(SimpleCircle other),但確實已定義了SimpleCircle(const SimpleCircle&)。表達式*this可以很容易地映射到該構造函數,因此它在這裏執行。

0

確定你有一個拷貝構造函數:這就是SimpleCircle(const SimpleCircle&);是。

它可能不需要SimpleCircle作爲參數,但它需要一個常量引用,這是一個複製構造函數需要的。 *this參數返回一個指向調用對象的指針,該對象由複製構造函數用於製作temp