成人app

首頁  /  C++教程  /  拷貝構造函數  /  

拷貝構造函數

點擊打開在線編譯器,邊學邊練

拷貝構造函數

 

成人app在C++中,與類名同名,且形參是本類對象的引用類型的函數,叫做拷貝構造函數(Copy Constrctor),與構造函數一樣,當我們不主動定義的時候,系統也會自動生成一個,進行兩個對象成員之間對應的簡單賦值,用來初始化一個對象,如如下的情形:

#include<iostream>
using namespace std;
#define PI 3.1415
class Circle
{
    private:
    double R;
    public:
    Circle(double R);
    Circle(Circle &A);
    double area();
    double girth();
};
Circle::Circle(double R)
{
    cout<<"Constructor"<<endl;
    this->R = R;
}
Circle::Circle(Circle &A)
{
    cout<<"Copy Constructor"<<endl;
    this->R = A.R;
}
double Circle::area()
{
    return PI*R*R;
}
double Circle::girth()
{
    return 2*PI*R;
}
int main()
{
 
    Circle A(5);
    Circle B(A);
    return 0;
}

 

本例中定義了一個Circle圓形類,分別定義了帶參數的構造函數和拷貝構造函數,然后在主函數中定義A對象,并傳入初始值,調用帶參數的構造函數。及定義B對象,通過A對象來初始化B對象。運行后可以看到

cpyc.png

第一次定義的A對象調用帶參數的構造函數,第二個B對象由于是通過A對象來初始化,所以調用拷貝構造函數。

請大家也上機試驗。

 

成人app大家可能疑問,在開頭我們提到如果我們不主動定義拷貝構造函數,也會自動為我們生成一個,那我們為何還要自己定義呢?

成人app那是因為,默認的拷貝構造函數僅僅是做簡單的賦值,有些情況則要出現問題,這就涉及到深拷貝與淺拷貝,我們在下一節給大家詳細介紹!



本文固定URL:http://hnsaiyang.com/course/68

Dotcpp在線編譯      (登錄可減少運行等待時間)