概念:是一種程式設計范型,同時也是一種程式開發的方法。
物件指的是類的例項,將物件作為程式的基本單元,將程式和資料封裝其中,以提高軟體的重用性、靈活性和擴充套件性。
c + + 不是純物件導向語言,而是基於物件導向的語言
(ps : 因為它包含c 的部分,c 是面向過程)
封裝,繼承,多型
protected(保護),private(私有),public(公有)
public成員可從類外部直接訪問,private/protected成員不能從類外部直接訪問。 每個限定符在類體中可使用多次,它的作用域是從該限定符出現開始到下乙個限定符之前或類體結束前。 類體中如果沒有定義限定符,則預設為私有。 類的訪問限定符體現了物件導向的封裝性。每個類都定義了自己的作用域,類的成員(成員函式/成員變數)都在類的這個作用域內,成員函式內可任意訪問成員變數和其它成員函式。 物件可以通過 . 直接訪問公有成員,指向物件的指標通過 -> 也可以直接訪問物件的公有成員。
在類體外定義成員,需要使用 : : 作用域解析符指明成員屬於哪個類域。
下面實現乙個簡單的類:
class person
public:
char* _name;//成員變數
char* _***;
int _age;
};int main()
每個物件的大小為類中所有成員變數的大小之和,當然這裡也遵循記憶體對齊原則。
類似結構體內存對齊原則。
【面試題】
1 . 為什麼要記憶體對齊?
2 . 空類物件(無成員變數的類)的大小是多少?為什麼?
3 . a和b型別的大小分別多少?
class a
;class b
;解答:
1.以空間換時間,訪問記憶體,如果按4位元組的整數倍讀取記憶體,對齊只需讀取一次,反之,將讀取多次。如果記憶體不對齊,會浪費空間。
struct aa
;讀取情況如下:
2.空類物件大小為1,表示該類存在過。
windows下對齊數為8,linux下為4
class a
;int main()
3.類a的大小為:8+8=16;類b的大小為8+16+8=32。(同結構體的記憶體對齊原則)
算了,還是寫寫吧!
結構體內存對其規則:
第乙個成員在與結構體變數偏移量為0 的位址處。 其他成員變數要對齊到某個數字(對齊數)的整數倍的位址處。
//對齊數 = 編譯器預設的乙個對齊數 與 該成員大小的較小值。 結構體總大小為最大對齊數(每個成員變數除了第乙個成員都有乙個對齊數) 的整數倍。
如果巢狀了結構體的情況,巢狀的結構體對齊到自己的最大對齊數的整數倍處,結構體的整體大小就是所有最大對齊數(含巢狀結構體的對齊數)的整數倍。
什麼是物件導向
什麼是物件導向 物件導向,就是,思考問題的方法,以物件為主體,眼睛看什麼都是物件 說 物件 其實還是不好懂,因為這個概念是直接從英文翻譯過來的 對中國人也許說,面向東西,面向物體 抽象的物體 面向事物,之類的翻譯或許更好理解 為什麼說是物件導向呢,是為了和 面向過程 相對以前 物件導向 的程式概念等...
什麼是物件導向?
物件導向程式設計 基本定義 物件 object 一切客觀實體的抽象,即將現實世界中的事物抽象成物件 類 class 定義了一件事物的抽象特點。如 狗 是乙個類,它包含狗的一切特徵和行為,是乙個模板 物件 object 是類的例項。如 名叫pyton的臘腸狗 物件導向的起源 1.以c為例他是結構化的語...
什麼是物件導向
物件導向就是主張一切皆物件,把所有事物都抽象成乙個物件來處理,乙個物件包括自己的屬性以及基本的方法以及操作。物件導向擁有三大征特,分別為封裝繼承多型 1.抽象 抽象就是忽略乙個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解全部問題,而只是選擇其中的一部分,暫時...