Class Cents(){
int m_val;
public:
Cents(int x=0){ cout<<"Constructor";}
Cents(const Cents& src){ cout<<"Copy constructor"}
Cents Add(int val){m_val=val; return *this} // --->(1)
}
Предположим, у меня есть Cents object obj
и звоню obj.Add()
Почему конструктор копирования вызывается только тогда, когда мы возвращаем * это?
Теперь выход будет
Конструктор
Copy конструктор
Так что мое предположение было здесь по возвращении *this
в (1) мы копируем значение объекта *this
в новый временный объект Cents obj ЭСТ. Вот почему вызывается конструктор копирования.
Теперь, если я линия (1) с
Cents Add(int val){ Cents temp;return temp;} // --->(2)
заменить только выход
Конструктор
Почему конструктор копирования не вызывается? Является ли мое предположение о строке (1) неправильным?
Предоставьте код, который использует ваш класс 'Cents', я не вижу никакого вызова конструктора в вашем фрагменте кода. – SpongeBobFan
@SpongeBobFan: пример - функция« Добавить », вторая версия, которая (в принципе) возвращает копия локальной переменной 'temp'. –
@SpongeBobFan> Ниже приведен фрагмент кода. Часть создания объекта. Я только что сказал в словах. Я думаю, это почему вы не могли понять. Below - это несколько частей кода. Для второго программного кода PLS замените строку (1) на эта строка Cents Add (int val) {Cents temp; return temp;} .Rest кода такой же.Класс Cents() { int m_val; public: Cents (int x = 0) {cout << "Constructor";} Cents (const Cents & src) {cout << "Конструктор копирования"} Cents Add (int val) {m_val = val; return * this} // ---> (1) } int main() {Cents obj; obj.Add (10));} – Poorvi