91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

拷貝構造函數

發布時間:2020-07-21 16:47:40 來源:網絡 閱讀:599 作者:BarnabyRoss 欄目:編程語言

   C++中,系統不僅會為你提供默認構造函數同時也會為你提供默認拷貝構造函數。那么拷貝構造函數是怎么一回事呢?有這么一段代碼:

People person  ( "chentong", 20, "student" );
People per(person);

   假設我們已經有了一個People的類,于是我們申請了一個類變量person。并且,我們對這個類變量進行了初始化。于是,我們申請了第二個類變量per,通過這種寫法,我們就相當于把person中的值全部寫到了per中去了。因為,默認拷貝構造函數使得兩個類變量指向了同一塊內存空間。默認拷貝構造函數使得per中的值指向了person中值的地址,換言之,兩個類變量指向的是同一塊內從空間,當釋放內存空間時,可能就會對同一塊內存空間進行重復釋放,這樣就會帶來內存泄露的危害。(二次釋放,有可能會把有用的值給釋放掉,所以,這樣做肯定是有危害的)

   為了解決二次釋放帶來的危害,C++允許我們自己寫拷貝構造函數。一般情況下,系統會為你提供默認構造函數,但是,如果你自己寫構造函數,并且是帶參數的構造函數,那么,你必須得提供一個不帶參數的構造函數。因為,當你自己寫了帶參數的構造函數,那么系統將不會為你提供默認構造函數。否則,使用將會出錯。

   這一次,我們定義兩個類,一個People類,一個Student類。

class People {

private:
	char* name;
	int age;
public:
	People() {

	}

	People(char* name, int age) {

		this->name = name;
		this->age = age;
		cout << "name = " << this->name << endl;
		cout << "age = " << this->age << endl;
	}

	//拷貝構造函數
	People(People& per) {

		this->name = per.name;
		this->age = per.age;
	}

	void SetName(char* name) {

		this->name = name;
	}

	void SetAge(int age) {

		this->age = age;
	}

};
class Student {

private:
	People father;//調用無參構造函數
	People mother;//調用有參構造函數
	int student_id;
public:
	Student() {

	}
        
	Student(int student_id, char* father, char* mother, int father_age = 42, int mother_age = 41){

		this->student_id = student_id;

	}

	void PrintInfo() {

		
	}

   現在我想要使用這些參數來構造我的類變量father和類變量mother。我該怎么做呢?很明顯我所構造的類變量father和mother調用的都是無參構造函數,但是,我想要調用有參構造函數,我該怎么做呢?我只要,

Student(int student_id, char* father, char* mother, int father_age = 42, int mother_age = 41 ) : father ( father, father_age ), mother ( mother, mother_age )

   在構造函數參數列表的外面,加上一個冒號,然后,把相應類變量的參數傳進去。那么假如我先對類變量mother進行初始化,再對類變量father進行初始化,這樣會有影響嗎?當然不會,初始化的前后順序并不會影響初始化的結果。因為,我們在創建類變量時,先創建的是類變量father,然后是mother,所以,不管你先對哪個類變量進行初始化,系統都是先對father進行初始化。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宁河县| 彭山县| 南漳县| 兰考县| 广德县| 青阳县| 嘉兴市| 通州区| 确山县| 枣强县| 上饶市| 民丰县| 松阳县| 灌阳县| 麟游县| 梨树县| 黄山市| 合川市| 横山县| 丰原市| 荣成市| 永兴县| 南漳县| 清原| 夏河县| 三河市| 城步| 镇沅| 隆林| 岳阳县| 锡林浩特市| 广昌县| 固安县| 油尖旺区| 大埔区| 韶关市| 青州市| 凌海市| 沙坪坝区| 清苑县| 德庆县|