函数返回类的对象与拷贝构造函数
生活随笔
收集整理的這篇文章主要介紹了
函数返回类的对象与拷贝构造函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?? C++中,如果我們在一個函數中,定義了一個類的對象,然后返回這個對象,在main函數中用一個對象去接受這個返回的對象的時候,這里面參與的函數調用大家可能不熟悉,這里通過程序和注釋的方式給大家講解一下。編譯的環境是vs2013,我下面是進入單步調試時測試出來的結果。大家可以把下面的代碼在自己的vs上面調試一下,結合著我的注釋內容(我把解釋部分直接放在了代碼注釋里面了),做更加深刻的理解。
?
#include<iostream>
using namespace std;class Date
{
private:int _year;int _month;int _day;
public:Date(int y,int m,int d);Date(const Date& d);void setDate(int y,int m,int d);void showDate();
};Date::Date(int y = 2017, int m = 3, int d = 8) :_year(y), _month(m), _day(d)
{cout << "Constcuting ..." << endl;
}Date::Date(const Date &d)
{_year = d._year;_month = d._month;_day = d._day;cout << "拷貝構造函數" << endl;
}void Date::setDate(int y, int m, int d)
{_year = y;_month = m;_day = d;
}inline void Date::showDate()
{cout << _year << "." << _month << "." << _day << endl;
}Date newSetdate(Date &d)
{Date tmp; //這里函數被調用,首先調用構造函數,并且自動賦初值,實例化了一個新的對象tmpreturn tmp; //這返回tmp的時候,沒有直接把內容進行返回,而是返回tmp的一份拷貝,所以這里調用了拷貝構造函數
}int main()
{Date date1(2017,3,7); //首先調用構造函數date1.showDate(); //這里打印的結果是2.17,3,7 date1 = newSetdate(date1); //這里首先調用的我的一個普通函數,大家可以先去這個普通函數中看一下date1.showDate();return 0;
}
這里給大家說一下調用拷貝構造函數的幾種情況,一般情況下建議重寫拷貝構造函數,防止出現深淺拷貝的問題。
(1)????當用類的一個對象去初始化類的另一個對象的時候
(2)????當函數的形參是類的對象,調用函數進行形參和實參結合時
(3)????當函數的返回值是對象,函數執行完成返回調用者時
總結
以上是生活随笔為你收集整理的函数返回类的对象与拷贝构造函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 谁来给我解释下冯小刚回张泉灵的那个梗~我
- 下一篇: 杂记5