構造函數

#include <iostream>
#include <windows.h>
#include <cstring>
using namespace std;
/*********************************************************************/
//有參無參的使用和作用介紹
class Text
{
public:
	Text()		//無參數 構造函數
	{			//作用:完成對屬性的初始化工作
		a = 10;
		p =NULL;
		cout << "我是構造函數 被執行了" << endl;
	}
	void Cout()
	{
		cout << p << endl;
		cout << a << endl;
	}
	~Text()		//析構函數
	{	//釋放內存空間
		if (p != NULL)
		{
			free(p);
		}
		cout << "我是析構函數 被執行了" << endl;
	}


protected:
private:
	int  a;
	char *p;
};
//給對象搭建一個舞臺,研究對象的行爲
void objpaly()
{
	//先構造,後稀釋
	//先執行t1的構造函數,再執行t2的構造函數,然後結束時先執行t2的析構函數,再執行t1的析構函數
	Text t1;
	t1.Cout();
	Text t2;
	t2.Cout();
}


int main1()
{
	objpaly();
	system("pause");
	return 0;
}
/************************************************************************************/
//調用有參數構造函數的 3 種方法
class Text2
{
public:
	Text2()		//無參數 構造函數
	{			//作用:完成對屬性的初始化工作
		m_a = 0;
		m_b = 0;
		cout << "無參數 構造函數" << endl;
	}
	Text2(int a)		//有參數 構造函數
	{			//作用:完成對屬性的初始化工作
		m_a = a;
		cout << "111有參數 構造函數" << endl;
		cout << "a=" << m_a << endl;
	}
	Text2(int a, int b)		//有參數 構造函數
	{			//作用:完成對屬性的初始化工作
		m_a = a;
		m_b = b;
		cout << "222有參數 構造函數" << endl;
	}


	//賦值構造函數(也稱copy構造函數)//用一個構造函數去調用另一個構造函數
	Text2(const Text2& obj)
	{
		cout << "我也是構造函數" << endl;
	}
public:
	void Printf()
	{
		cout << "普通成員函數" << endl;
	}


protected:
private:
	int  m_a;
	char m_b;
};


int main05()
{
	Text2 t1;		//	這樣寫直接調用 無參數構造函數 C++自動的調用構造函數
					//1   () 法調用有參數函數
	Text2 t2(1, 2);	//調用有參數函數	C++自動的調用構造函數
	Text2 t3(1);
	t2.Printf();


	//2  = 法調用有參數構造函數
	Text2 t4 = (1, 2, 3, 4);	//C++對 = 進行了功能增強,逗號表達式的最後的值是參數的值
	Text2 t5 = 5;


	//3 手工直接的調用構造函數
	Text2 t6 = Text2(1, 2);	//先調用有參數構造函數,再通過有參構造函數去調用copy構造函數	
	Text2 t7 = Text2(1);		//產生匿名對象,(匿名對象的額去和留)
								//t7對象的初始化
	t1 = t7;					//賦值操作,把t7copy給t1
	system("pause");
	return 0;
}

發佈了42 篇原創文章 · 獲贊 35 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章