構(gòu)造函數(shù)
#include <iostream>
#include "類的定義.h"
//構(gòu)造函數(shù)名字必須與類名一致,并且不能指定返回類型 --->初始化
class Cuboid {
public :
//1.
Cuboid() {//默認(rèn)構(gòu)造函數(shù) :1.空參? 2.帶所有形參帶默認(rèn)參數(shù)?
len=hei=wit=0;
};//內(nèi)部構(gòu)造函數(shù),必須為public;
//2.
Cuboid(int l,int h,int d=0) : len(l),hei(h),wit(d) {};?
int volume() {
return len*hei*wit;
};
//3.
Cuboid (int l=0,int h=0);//參數(shù)默認(rèn)值只能先在類的內(nèi)部定義,不能放在外面
private:
int len,hei,wit;
String str;?
};
//外部構(gòu)造函數(shù)
Cuboid :: Cuboid (int l,int h) {
len = l,hei = h;
}
int main() {
//Cuboid k; 1,3構(gòu)成歧義
Cuboid m(1,3);
return 0;
}
/*
利用帶默認(rèn)參數(shù)的默認(rèn)造函數(shù)? 進(jìn)行隱式轉(zhuǎn)換 (把某個(gè)數(shù)據(jù)類型轉(zhuǎn)換成類 類型)?
一般將單形參構(gòu)造函數(shù)設(shè)置為explicit,表明該函數(shù)為顯式,不能進(jìn)行隱式轉(zhuǎn)換,可以避免錯(cuò)誤。?
class Cuboid 中:?
Cuboid(const String &s) : str(s) {}; //引用+不可修改?
main 中:?
string s = "jfiasgjoag";?
Cuboid k = Cuboid(s); //使用構(gòu)造函數(shù),某種意思上將s字符串類型,變?yōu)榱艘粋€(gè)對象?
*/?
/*
復(fù)制構(gòu)造函數(shù):
利用一個(gè)已知的構(gòu)造函數(shù),來初始化一個(gè)被創(chuàng)建的同類的對象
只復(fù)制,所以用const限定
不自定義的話,會(huì)自動(dòng)生成合成復(fù)制構(gòu)造函數(shù) ,
即不定義也可以使用等號。
經(jīng)常應(yīng)用在函數(shù)形參 或者 返回值為 對象時(shí)?
?
淺復(fù)制(指針指向同一塊存儲(chǔ)空間,為了復(fù)制時(shí)節(jié)省空間)但會(huì)出bug;
深復(fù)制 ,new一個(gè)新的?
用 = ,即系統(tǒng)自動(dòng)生成的復(fù)制都是淺復(fù)制?
https://www.icourse163.org/learn/NWPU-494001?tid=1468259464#/learn/content?type=detail&id=1250100088&sm=1
*/?