#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;
}
構造函數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.