建構函式語法:類名(){}
建構函式,沒有返回值也不寫void
函式名稱與類名相同
建構函式可以有引數,因此可以發生過載
程式在呼叫物件時候會自動呼叫構造,無須手動呼叫,而且只會呼叫一次
析構函式語法:~類名(){}
析構函式,沒有返回值也不寫void
函式名稱與類名相同,在名稱前加上符號 ~
析構函式不可以有引數,因此不可以發生過載
程式在物件銷毀前會自動呼叫析構,無須手動呼叫,而且只會呼叫一次
class person
//析構函式
~person()
};
兩種分類方式:
按引數分為: 有參構造和無參構造
按型別分為: 普通構造和拷貝構造(用乙個物件來初始化物件。簡單概括為直接結構體賦值而不是裡面的成員分別賦值)
三種呼叫方式:
括號法顯示法
隱式轉換法
//1、建構函式分類
// 按照引數分類分為 有參和無參構造 無參又稱為預設建構函式
// 按照型別分類分為 普通構造和拷貝構造
class person
//有參建構函式
person(int a)
//拷貝建構函式
person(const person& p)
//析構函式
~person()
public:
int age;
};//2、建構函式的呼叫
//呼叫無參建構函式
void test01()
//呼叫有參的建構函式
void test02()
int main()
class person
person(int age)
person(const person& p)
//析構函式在釋放記憶體之前呼叫
~person()
public:
int mage;
};//1. 使用乙個已經建立完畢的物件來初始化乙個新物件
void test01()
//2. 值傳遞的方式給函式引數傳值
//相當於person p1 = p;
void dowork(person p1) {}
void test02()
//3. 以值方式返回區域性物件
person dowork2()
void test03()
int main()
class person
//有參建構函式
person(int a)
//拷貝建構函式
person(const person& p)
//析構函式
~person()
public:
int age;
};void test01()
void test02()
int main()
淺拷貝:簡單的賦值拷貝操作
深拷貝:在堆區重新申請空間,進行拷貝操作
注意:如果屬性有在堆區開闢的,一定要自己提供拷貝建構函式,防止淺拷貝帶來的問題。
class person
//有參建構函式
person(int age ,int height)
//拷貝建構函式
person(const person& p)
//析構函式
~person()
}public:
int m_age;
int* m_height;
};void test01()
int main()
原理是:屬性在堆區申請了空間,如果兩個物件做淺拷貝則兩個物件的同一屬性指向同一塊空間,在析構時會導致重複釋放一塊空間的值,造成錯誤。
class person
//初始化列表方式初始化
person(int a, int b, int c) :m_a(a), m_b(b), m_c(c) {}
void printperson()
private:
int m_a;
int m_b;
int m_c;
};
構造的順序是 :先呼叫物件成員的構造,再呼叫本類構造
析構順序與構造相反
class phone
~phone()
string m_phonename;
};class person
~person()
void playgame()
string m_name;
phone m_phone;
};void test01()
int main()
靜態成員函式
class person
;int person::m_a = 10;
int person::m_b = 10;
void test01()
int main()
靜態成員函式例子
class person
static int m_a; //靜態成員變數
int m_b; //
private:
//靜態成員函式也是有訪問許可權的
static void func2() };
int person::m_a = 10;
void test01()
int main()
C 構造和析構
include using namespace std class b b b b b b int i data i b operator b b private int data b play b b int main output constructed by parameter 5 destr...
C 構造和析構
建構函式的作用是給類中的資料成員初始化,在乙個類物件產生的時候自動呼叫,建構函式分為帶參構造 無參構造。他倆唯一的區別就是乙個有引數,乙個沒引數,視實際情況使用 class cmyc cmyc cmyc cmyc cmyc int a,float b,char ch 它在乙個類物件被建立的時候自動呼...
C 構造和析構
1 繼承關係可認為,子類在父類的基礎上進行。從這個角度講,可把它認為穿衣 的過程。穿衣是 先穿內衣,再穿外套。是 先脫外套,在 構造是 先呼叫父類構造方法,再呼叫子類構造方法。析構是 先呼叫子類析構方法,再呼叫父類析構方法。2 構造可分為兩個步驟 初始化列表和方法內賦值。前者的使用場景是 初始化,即...