結構體預設情況下是共有的,類的成員在預設情況下是私有的
包括資料成員和成員函式
資料成員可以是任何的資料型別,但是不能用extern(
外部型,不是在當前程式段分配記憶體
),auto(
自動型,不宣告就是
),register(
暫存器型
)指定它的儲存型別,可以是
static型別
不能在類的宣告中給資料成員賦初值
class abc ;
成員函式要在類體內宣告,還要在類外定義,成員函式在類內部定義就是內聯函式
class point
//內聯函式第一種表示
inline int gety(); //內聯函式第二種表示};
void point::setpoint(int a, int b)
inline int point::gety()
類外定義函式名前加 類名::
成員函式若有引數要有完整的引數說明
成員函式的返回型別應與函式原型宣告的相同
是類的乙個例項
同類的多個物件佔據記憶體的不同區域,每個物件儲存的資料不同,但是用來運算元據的程式**是一樣的,即使用相同的成員函式
建立物件
class point
op1,op2; //op1,op2是全域性變數
main ()
物件賦值
兩個物件賦值時,型別必須相同,兩個物件分別占用不同的儲存空間,若類的成員是指標型別,可能出錯
使用同名物件時應加作用域運算子」::」
建構函式與類名相同,是共有函式,不能指定返回型別,void
也不行,不能顯示呼叫
靜態物件,只構造一次
全域性物件,在執行main()
之前呼叫
外部物件,程式並不為它呼叫建構函式
建構函式可以過載
為類定義了帶引數建構函式時c++
編譯器不產生預設建構函式
可以採用構造初始化表對資料成員進行初始化c++
編譯器也不產生預設建構函式
拷貝建構函式
型別 (const
類名 &
物件名);
類名::
類名 (const
類名 &
物件名) //
沒有反值
(建構函式沒反值)
拷貝建構函式
如果沒有定義拷貝建構函式,系統就會產生乙個預設的拷貝建構函式
如果所定義的類的資料成員是普通的變數(
不是指標,不是陣列
),沒必要寫拷貝建構函式。如果有指標或者陣列,如果建構函式中存在需要動態分配記憶體的資料成員,必須定義拷貝建構函式,不然會出錯
呼叫拷貝建構函式的地方
新建物件
point p2(p1);
函式的形參是個物件,那麼傳遞的時候體統就會呼叫實參的拷貝建構函式
void f(a a)
void main()
如果函式的反值是個物件,這裡也會呼叫拷貝構造
a fn(a &a)
void main()
物件賦值的時候也會呼叫拷貝建構函式
point p1(10,20);
point p2=p1; //等價於
point p2(p1);
資料型別轉換
int num; //example try(num);
float x, float y; //point p (x,y);
char a=
」hello
」; //string s(a);
在類定義體中,與類同名,並在前面冠以」~」的成員函式
釋放物件在構造時分配的資源
關閉被建構函式開啟的檔案
釋放動態記憶體
物件的生命週期結束時,由體統自動呼叫
呼叫順序與建構函式相反
析構函式沒有返回型別,沒引數,析構函式不能過載
資料成員是指標來代替陣列,一開始不知道陣列需要開多大的空間
等具體的時候再決定指標的陣列需要多的記憶體空間,這樣就不浪費
class string_data
~string_data()
void get_info(char &);
void sent_info(char *char); }
第三節 定義乙個類 3
當你宣告乙個類,你需要列出物件應有的所有變數和所有函式 被稱為屬性和方法.3.1.1中顯示了乙個類的構成.注意在大括號 內你只能宣告變數或者函式.3.1.2中顯示了如何在乙個類中定義三個屬性和兩個方法.3.1.1 class name extends another class 3.1.2 www....
Python 物件導向(第三節課)
用了兩次markdown,還是用不習慣。先不用了,這個東西也是要學習成本的,等學完這段再研究一下。目前可能是我不會用的緣故,我感覺不順手,效率很低。所以還是用富文字編輯器吧。第三節課,先回顧一下上節課的,正好在此用乙個 把一些定義再捋一捋,這樣有助於消化和記憶,下面直接上 例項方法 類方法靜態方法 ...
第三節 基本操作之資料 更新
102update 是修改前的鍵值對 修改後的鍵值對 查詢乙個x 2的資料 db.config collection.find 修改它的值為100 db.config collection.update 再次查詢x 2的值 結果沒有這個值 查詢x 100的值 存在並且 id 為1 表明修改成功 部分...