類成員變量的存儲類型:
C語言:1、棧區(動太區) 2。堆區, 3.靜态區
1、普通變量作為成員變量
2、指針變量作為成員變量
3、靜态變量作為成員變量:
1、靜态變量在程式調用時就已經配置設定好空間,2、在類外時必須初始化 3.對象共享靜态變量(也就是執行個體化對象時,不會再配置設定靜态空間) 4。構造函數的初始化清單是不能對靜态成員變量初始化
初始化: 類型 類::靜态變量=初始值; 這不是通路
3.1靜态函數作為成員函數
1、靜态函數屬于類,不尾具體對象(屬于所有該類的對象) 2、靜态函數是不能通路非靜态成員。
總結:靜态成員屬于類(也就是屬于所有對象,也就是共享)
4、對象作為成為成員變量:
注:成員對象的初始化隻能由構造函數的初始化清單初始化。如果不顯示去初始化成員對象,則系統預設添加無參構造方法。如果顯示的調用構造函數,則調用函構造函數由形參列來比對調用
student::student():s() --調用s的無參構造函數
student::student(int id,const char* name,int c=0,int e=0,int m=0):id(id),s(c,e,m) --調用s(int,int,int)構造函數
總結:構造函數就是用于初始化成員的空間(普通變量,指針變量,成員對象)
友元:
友元函數(*):當某個函數需要通路某類的非公有成員(方法,屬性)時,由于類的封裝性,在類外不能通路,可以将此函數聲明為此類的類友函數時。此函數就可通路此類的任何成員。
class 類
{
。。。
friend 聲明;
。。。
}
注:優點:友元可以通過聲明友元時,此函數通路所有成員
缺點:破壞封裝性。
友元類:
運算符:隻能識别基本類型(整型,浮點型,字元類型)的操作,不能直接識别複雜類型
重載運算符:可以通過“拓展”運算符來運算操作複雜類型。 --本質就是函數
傳回值 operator運算符(形參) 本質:就是函數
1、
+ - * / 雙目運算符
成員函數: 傳回值 operator+(形參&)
非成員函數: 傳回值 operator+(形參1,形參2&)
2、重載下标未能:引用數組:
int buf[10]={1,2,3,4,}; buf[3]
傳回值 operator[](int);
總結1:
1、重載運算符時,不會改變運算的順序。(操作數與被操作的順序不會改變)
2、不會改變結合性。
3、不會改變運算的優先級(與C語言中運算符優先一緻) 1+2+3+4 ia+ib+ic+id
4、不會改運算符的特性。
5、如下運算是不能重載的: . -> sizoef :: ? : (已經在C++/C語言中明确作用)
發送消息:
類 ia,ib;
類 ic=ia+ib; //等價于 類ic=ia.operator+(ib);