跟函式有關,只能在函式中使用
前有個隱藏的this,this為乙個指標,為該物件的位址
沒有返回型別,與類的名稱一模一樣,當物件被創造時呼叫,可以有引數
沒有返回型別,與類的名稱一模一樣,當物件被結束時呼叫,區別為在函式前加"~",不可以有引數
c++結構體可以有建構函式,但有建構函式的時候,就不能用普通的c語言定義結構體方法給它賦初值,只能用建構函式
沒有引數的就叫預設建構函式,包括自己定義的沒有引數的建構函式
new運算子的返回值為位址,new時先給空間再初始化,delete是先析構,再收回空間
舉例:int * psome= new int [10]
此時使用delete psome 來表示刪除這連續10個int空間,不帶的話則表示只析構第乙個
但是,此時也刪除了這連續的10個空間,但是沒有析構其餘9個int,帶則析構了全部
##不要用delete去釋放不是new出來的空間(在分配的表中沒找到那一項)
##delete乙個空指標是安全的
private的作用域只在類內,注:同一類的物件可以相互訪問,只在編譯時檢查
protect的作用域為類及類的子孫
public的作用域為其餘函式都可以訪問
可以訪問其的private變數,只在編譯時候檢查
class沒有宣告訪問屬性,預設為private
struct預設為public
在建構函式前執行,推薦使用初始化列表初始化,不要在建構函式中賦初值,在建構函式初始化則意味著,它必須有預設值,因為在建構函式中賦初值,相當於已經賦初值了兩次,,構造後一次,初始化一次
成員變數初始化需要在這,父類的初始化也需要在這
同時順序是按宣告的順序開始執行的
最先為父類,再按類中宣告的成員變數順序開始初始化
拿其他物件拼裝出乙個類,在成員變數中有其他類的物件
拿已有的類,在已有的類上進行修改,從而有乙個新的類
構造時,先構造父類,再構造子類
析構時反過來
在子類定義乙個父類已有的方法,此時這個方法與父類無關(其他過載的不同引數的函式都不能用)
其他語言則為overwrite 為父類的替代品
介面是類的方法中public的部分,即對外公開的部分(個人理解)
建議不要使用
相當於把函式**搬到使用的地方,編譯時,並不產生這個函式的**
要在.h中宣告並定義
會增加程式**,空間換時間
比巨集定義要好,可以型別檢查
成員函式在類宣告時就給出body即為內聯函式
適用範圍:比較小,兩三行或者頻繁呼叫
不適用範圍:遞迴和非常大的函式不可以為內聯函式
const 在 * 之前,意思為不能通過該指標變數去修改值
const 在 * 之後,意思為不能修改該指標的值(即所指向的位址)
在函式後面寫了const 意味著this是const
當dll/lib中已經實現標頭檔案中的函式,類時,只引用h就可以了,否則h和cpp都得引入工程(暫時理解,以後繼續補充)
變數的別名。
定義規則:型別& 變數名= 原變數
若在引用前+const 則不能用引用去改變原變數的值
特點:1.不能是null
2.必須依靠乙個變數,是變數的別名
3.不能更改為新的變數的別名
4.不能將其他引用作為右值
5.實際為const 指標
把子類當成父類使用
虛函式有虛函式的模擬普通類大,一般為乙個int型變數大小(位址)
該變數(vttr)指向乙個表(vtable),該錶存放著該類的虛函式的位址,所有該類的物件的表的位址相同(一般為該物件的第乙個int大小範圍)
如果類中有乙個virtual函式,那麼析構函式應為virtual函式
1.不用改變那個物件
2.通過傳遞位址而不是傳遞變數本身
3.防止其被改變
也可以用等號+某個值,不用圓括弧
類中的成員變數的拷貝,全部複製,指標也會被拷貝,位址相同,引用也會被拷貝,指向同乙個變數
新增加乙個建構函式,引數為const 本身物件&
就可以自己控制拷貝時的細節
如果不+const和&,會陷入死迴圈,在傳參時會發生一次拷貝構造,拷貝時又發生,迴圈反覆
1.預設建構函式 2.虛建構函式 3.拷貝建構函式
1.持久儲存(不依賴某個物件而存在)
2.訪問性受侷限(隱藏)
static free function – 過時
static global variables – 過時
static local variables – 持久儲存
static member variables – 被所有例項共享
static member function – 被所有例項共享,且只能接受static變數
靜態的成員變數要找個cpp去放這個變數,不然只是在類中宣告,而不是定義
靜態的成員函式不能有非static變數的原因是因為它沒有this
全域性變數的建構函式在main之前,析構函式在main函式結束時或者呼叫了exit()
全域性變數初始化順序是無序的
this為其第乙個引數
第乙個const作用為防止其為左值
第二個const表示引數不會被修改
第三個const表示this不會被修改
雙目一般作為非成員,單目部分(=,(),,->,->*)一定要作為成員
是乙個宣告,使用函式時會先檢查是否有匹配的函式,再檢查是否有匹配的函式模板
建構函式中拋異常,不會呼叫析構函式,也得不到這個物件,但是記憶體已經分配
如果兩個函式引數相同,返回型別不同是不能過載的
js 物件導向相關筆記(五)
1.作用域 起作用的範圍 塊兒級作用域 ecmascript6之前js中沒有塊兒級作用域 詞法作用域 就是在 寫好的一刻,變數的作用域就已經確定了,這種作用域,就是所謂的詞法作用域,和詞法作用域相對的叫動態作用域,js中的詞法作用域不是動態作用域 ecmascript6之前js中唯一能夠產生作用域的...
C 物件模型筆記 一 C 物件
c 支援了資料和方法的聯絡。對 c 來說,他的布局成本就是 1.none static data member 2.a pointer to virtue table 3.the pointer to virtue class 而成員函式,並不包括在 c 物件裡。還而言之,每乙個非 inline 成...
c 物件導向筆記
繼承形式如下 class derived class access specifier base class當乙個類派生自基類,該基類可以被繼承為 public protected 或 private 幾種型別。繼承型別是通過上面講解的訪問修飾符 access specifier 來指定的。我們幾乎...