c++從入門到精通——構造函數 、 析構函數、拷貝構造函數

構造函數

類的構造函數是一種特殊的函數,在創建一個新的對象時調用。類的析構函數也是一種特殊的函數,在刪除所創建的對象時調用。

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

//分類
//按照參數進行分類  無參構造函數(默認構造函數)   有參構造函數
//按照類型進行分類  普通構造函數  拷貝構造函數
class Person
{
public: //構造和析構必須寫在public下才可以調用到

	Person() //默認 、 無參構造函數
	{
		cout << "默認構造函數調用" << endl;
	}

	Person(int a)
	{
		cout << "有參構造函數調用" << endl;
	}

	//拷貝構造函數
	Person(const Person& p)
	{
		m_Age = p.m_Age;
		cout << "拷貝構造函數調用" << endl;
	}

	~Person()
	{
		cout << "析構函數調用" << endl;
	}

	int m_Age;
};

調用方法1

調用方法就有七八種之多,有點複雜。

void test01()
{
	//構造函數調用方式
	//括號法調用
	Person p1(1); //有參
	p1.m_Age = 10;
	Person p2(p1); //拷貝
	cout << "p2的年齡" << p2.m_Age << endl;

	Person p3; //默認構造函數 不要加()   Person p3(); //編譯器認爲這行是函數的聲明
}

運行

有參構造函數調用
拷貝構造函數調用
p2的年齡10
默認構造函數調用
析構函數調用
析構函數調用
析構函數調用

調用方法2

void test02()
{

	//顯示法調用
	Person p4 = Person(100);
	Person p5 = Person(p4);

	Person(100); //匿名對象 ,匿名對象特點,如果編譯器發現了對象是匿名的,那麼在這行代碼結束後就釋放這個對象

	//不能用拷貝構造函數 初始化匿名對象
	Person p6 = Person(p5); //如果寫成左值,編譯器認爲你寫成 Person p5; 對象的聲明,如果寫成右值,那麼可以

	
	Person p7 = 100; //相當於調用了 Person p7 = Person(100) ,隱式類型轉換
	Person p8 = p7; // 相當於  Person p8 = Person(p7);
}

運行

有參構造函數調用
拷貝構造函數調用
有參構造函數調用
析構函數調用
拷貝構造函數調用
有參構造函數調用
拷貝構造函數調用
析構函數調用
析構函數調用
析構函數調用
析構函數調用
析構函數調用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章