[C++]拷貝(復(fù)制)構(gòu)造函數(shù)-創(chuàng)新互聯(lián)

拷貝(復(fù)制)構(gòu)造函數(shù)

拷貝構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù),其形參為本類的對(duì)象引用
形式如下:

創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供安寧網(wǎng)站建設(shè)、安寧做網(wǎng)站、安寧網(wǎng)站設(shè)計(jì)、安寧網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、安寧企業(yè)網(wǎng)站模板建站服務(wù),10余年安寧做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
class 類名{public :
類名(形參);    //構(gòu)造函數(shù)  
類名(類名 &對(duì)象名);//拷貝構(gòu)造函數(shù)
};

拷貝構(gòu)造函數(shù)實(shí)例:

#includeusing namespace std;
class Point{public:
    Point();    //缺省構(gòu)造函數(shù)
    Point(int X,int Y); //帶參構(gòu)造函數(shù)
    ~Point();   //析構(gòu)函數(shù)
    Point(Point &p);   //拷貝構(gòu)造函數(shù)聲明
    void setPoint(int X,int Y); //設(shè)置點(diǎn)坐標(biāo)
    int getX(); //獲得點(diǎn)的X坐標(biāo)
    int getY(); //獲得點(diǎn)的Y坐標(biāo)
    void setX(int X); //設(shè)置點(diǎn)的X坐標(biāo)
    void setY(int Y); //設(shè)置點(diǎn)的Y坐標(biāo)
    private:
    int x,y;
};

Point::Point(){x = 0;
    y = 0;
    cout<<"缺省樣式的構(gòu)造函數(shù)調(diào)用完畢"<x = X;
    y = Y;
    cout<<"帶參構(gòu)造函數(shù)調(diào)用完畢"<cout<<"點(diǎn)("<x = p.x;
    y = p.y;
    cout<<"拷貝構(gòu)造函數(shù)調(diào)用完畢"<x = X;
    y = Y;
}
int Point::getX(){return x;
}
int Point::getY(){return y;
}
void Point::setX(int X){x = X;
}
void Point::setY(int Y){y = Y;
}
int main(void)
{Point p1(10,10),p2(p1);
    p1.setPoint(1,1);
    return 0;
}

運(yùn)行結(jié)果如下:
拷貝構(gòu)造函數(shù)

如果沒有為類聲明構(gòu)造函數(shù),則編譯器自己生成一個(gè)拷貝構(gòu)造函數(shù)。

  • 該拷貝構(gòu)造函數(shù)所執(zhí)行的功能是:用作為初始值的對(duì)象的每個(gè)數(shù)據(jù)成員的值,初始化將要建立的對(duì)象的對(duì)應(yīng)的數(shù)據(jù)成員

拷貝構(gòu)造函數(shù)的主要應(yīng)用場(chǎng)景:

  • (1) 在聲明語句中用一個(gè)對(duì)象初始化另一個(gè)對(duì)象。例如
Point p1;
Point p2 = p1,p3(p1);
  • (2) 若函數(shù)的形參是類對(duì)象,調(diào)用函數(shù)時(shí),實(shí)參賦值給形參,系統(tǒng)自動(dòng)調(diào)用拷貝構(gòu)造函數(shù)。
    例如,將一個(gè)對(duì)象作為參數(shù)按值調(diào)用方式傳遞給另一個(gè)對(duì)象時(shí)生成對(duì)象副本。
void fun1(Point p){cout<Point A(1,2);
    fun1(A);
}

拷貝構(gòu)造函數(shù)各種調(diào)用場(chǎng)合舉例:

#includeusing namespace std;
class Point{public:
    Point();    //缺省構(gòu)造函數(shù)
    Point(int X,int Y); //帶參構(gòu)造函數(shù)
    ~Point();   //析構(gòu)函數(shù)
    Point(Point &p);   //拷貝構(gòu)造函數(shù)聲明
    void setPoint(int X,int Y); //設(shè)置點(diǎn)坐標(biāo)
    int getX(); //獲得點(diǎn)的X坐標(biāo)
    int getY(); //獲得點(diǎn)的Y坐標(biāo)
    void setX(int X); //設(shè)置點(diǎn)的X坐標(biāo)
    void setY(int Y); //設(shè)置點(diǎn)的Y坐標(biāo)
    private:
    int x,y;
};

Point::Point(){x = 0;
    y = 0;
    cout<<"缺省樣式的構(gòu)造函數(shù)調(diào)用完畢"<x = X;
    y = Y;
    cout<<"帶參構(gòu)造函數(shù)調(diào)用完畢"<cout<<"點(diǎn)("<x = p.x;
    y = p.y;
    cout<<"拷貝構(gòu)造函數(shù)調(diào)用完畢"<x = X;
    y = Y;
}
int Point::getX(){return x;
}
int Point::getY(){return y;
}
void Point::setX(int X){x = X;
}
void Point::setY(int Y){y = Y;
}
void f(Point p) //函數(shù)的形參是類的對(duì)象
{cout<<"函數(shù)f之中"<//函數(shù)的返回值是類的對(duì)象
    Point a(7,33);
    cout<<"函數(shù)g之中:"<Point p1,p2(15,10),p3(p1),p4 = p2;
    f(p2);
    p2 = g();
    return 1;
}

運(yùn)行結(jié)果:
拷貝構(gòu)造函數(shù)2
Notice:只有在聲明語句中使用一個(gè)變量初始化另一個(gè)對(duì)象才調(diào)用拷貝構(gòu)造函數(shù)

int main()
{Point p1(1,2),p2 = p1;
    return 1;
}

1
反之,不調(diào)用拷貝構(gòu)造函數(shù)

int main()
{Point p1(1,2),p2;
	p2 = p1;
    return 1;
}

2

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

本文標(biāo)題:[C++]拷貝(復(fù)制)構(gòu)造函數(shù)-創(chuàng)新互聯(lián)
標(biāo)題路徑:http://muchs.cn/article38/dshssp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、用戶體驗(yàn)、ChatGPT外貿(mào)網(wǎng)站建設(shè)、App開發(fā)建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)