希望暴露public
希望隱藏private
物件例項化有兩種方式,從棧例項化,從堆(new出來的)例項化。
以誰做什麼作為核心。
public 放前面,private放後面(屬性可以定義為private格式)。
唯讀屬性,只有get方法,沒有set方法。
#include
#include
using
namespace std;
/** * 定義類:student
* 資料成員:m_strname
* 資料成員的封裝函式:setname()、getname()
*/class
student
// 定義資料成員封裝函式getname()
string getname()
//定義student類私有資料成員m_strname
private
: string m_strname;};
intmain()
棧區,儲存變數。
new分配的記憶體,是堆區。
全域性區,儲存全域性變數和靜態變數。
常量區,儲存常量。
**區,儲存**。
物件需要初始化,有的只有一次,有的需要初始化多次。
建構函式,會在物件例項化時被呼叫。
都有預設值的建構函式,稱為預設建構函式。
乙個類可以沒有預設建構函式,有別的建構函式也可以例項化物件。
可以全屏**,看到關鍵點可以暫停,記錄一下。因為螢幕太小,看著眼疼。或者全屏**的時候,把文字置頂。
c++中,建構函式與類名相同,析構函式前面加乙個波浪線。析構函式,可以進行資源釋放。
tips:class 宣告類,要小寫的c。建構函式,析構函式前面,不需要任何修飾。class結尾還需要分號;
#include
#include
using
namespace std;
/** * 定義類:student
* 資料成員:m_strname
* 無參建構函式:student()
* 有參建構函式:student(string _name)
* 拷貝建構函式:student(const student& stu)
* 析構函式:~student()
* 資料成員函式:setname(string _name)、getname()
*/class
student
student
(string _name)
student
(const student& stu)
~student()
void
setname
(string _name)
string getname()
private
: string m_strname;};
intmain
(void
)
輸出:(注意這裡new和delete是配對出現)
student(string _name)
慕課網~student()
#include
#include
using
namespace std;
/** * 定義類:student
* 資料成員:m_strname
* 無參建構函式:student()
* 有參建構函式:student(string _name)
* 拷貝建構函式:student(const student& stu)
* 析構函式:~student()
* 資料成員函式:setname(string _name)、getname()
*/class
student
student
(string _name)
student
(const student &stu)
~student()
void
setname
(string _name)
string getname()
private
: string m_strname;};
intmain
(void
)
這裡就不需要delete,自動釋放
student()
student(const student &stu)
慕課網~student()
~student()
malloc 和 free ,這兩個是庫函式,而在c++中 new 和 delete是運算子(和 + - * /一樣),在使用new的時可以看成使用預設使用建構函式+malloc,使用delete時可以看成使用析構函式+free。
如:
classa~
a()private:
char
* m;};
intmain()
這個程式執行後會報錯
所以1. delete a 僅釋放了a指標指向的全部記憶體空間,但是只呼叫了a[0]的析構函式,剩下的a[1]和a[2]中m申請的記憶體不能夠釋放,則造成了記憶體洩漏。
2. delete a 釋放了a指標申請的記憶體並且呼叫析構函式釋放掉所有申請的記憶體
類的建構函式 析構函式 成員函式與賦值函式
類的建構函式 1 預設的拷貝建構函式 和 預設的賦值函式 均採用 位拷貝 而非 值拷貝 的方式來實現,若類中含有指標變數,不能採用預設的方式。2 如果類存在繼承關係,派生類必須在其初始化表裡呼叫基類的建構函式。3 類的const 常量只能在初始化表裡被初始化,因為它不能在函式體內用賦值的方式來初始化...
C 建構函式 析構函式 虛析構函式
一般地,建立物件和刪除物件時,父類建構函式 子類建構函式 子類析構函式 父類析構函式。特例 如果用new建立了乙個物件,並將父類的指標指向這個子類的物件,那麼用delete撤銷物件時,系統只執行基類的析構函式,而不執行派生類的析構函式。如果希望按照子類析構函式 父類析構函式的順序執行,那麼應該將基類...
C 建構函式,析構函式
一 建構函式 在建立類的物件時自動呼叫的乙個函式,主要是為物件本身做初始化工作 沒有返回值,名字和類的名字相同,因為是在建立物件時候自動呼叫的,所以必須型別為public的,可以帶引數,可以有多個 如果類中沒有建構函式,在下面三種情況下,會自動的新增預設的建構函式 1.如果類中有虛函式,或者類中有虛...