2012-04-09 4 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

+1

'SimpleCircle (const SimpleCircle &);' ваш конструктор копирования, и это тот, который вызывается. –

+0

Вы можете определить поведение программы с помощью отладчика. –

ответ

8

Это действительно вызов конструктора копирования. Хотя у вас нет определенного конструктора SimpleCircle(SimpleCircle other), у вас есть SimpleCircle(const SimpleCircle&). Выражение *this может легко сопоставляться с этим конструктором, и, следовательно, это то, что выполняется здесь.

0

Уверены, что у вас есть конструктор копирования: вот что такое SimpleCircle(const SimpleCircle&);.

В качестве аргумента может не принимать значение SimpleCircle, но требуется постоянная ссылка, которая нужна всем конструкторам копий. Аргумент *this возвращает указатель на вызывающий объект, который используется конструктором копирования для создания temp.

Смежные вопросы