類與物件的初步認識
很多語言都有這方面的區分,比如c語言是面向過程的語言,關注的是過程,分析出求解問題的步驟,通過函式呼叫逐步解決問題。但是c++是基於物件導向的,關注的是物件,將一件事情拆分成不同的物件,靠物件之間的互動完成。
類的引入
在c語言中,結構體的使用只能定義變數,但是在c++中不一樣,不僅可以定義變數還可以定義函式
但在c++結構體的定義中,更喜歡用classl來代替。
類的定義
class classname;//非常重要的分號
class為定義類的關鍵字,classname為定義類的名字,{}中為類的主體,注意類定義結束時後面分號
類中的元素稱為類的成員:類中的資料稱為類的屬性或者成員變數,類中的函式稱為類的方法或者成員函式。
類的兩種定義方法
1、宣告和定義全部放在類體中,需要注意:成員函式如果在類中定義,編譯器可能會當成內聯函式處理。
class skrskr
#include "skrskr.h"
void skrskr::showinfo()
;//這裡需要指明是屬於哪個類中
void skr::skrinfo()
private:
int _a;
};
class a2
};
class a3
{};
int main(){
std::cout結構體內存對齊規則
該規則在之前結構體寫到過
1.第乙個成員在與結構體偏移量為0的位址處。
2.其他成員變數要對齊到某個數字(對齊數)的整數倍的位址處。
注意:對齊數 = 編譯器預設的乙個對齊數 與 該成員大小的較小值。 vs中預設的對齊數為8,gcc中的對齊數為4
3.結構體總大小為:最大對齊數(所有變數型別最大者與預設對齊引數取最小)的整數倍。
4.如果巢狀了結構體的情況,巢狀的結構體對齊到自己的最大對齊數的整數倍處,結構體的整體大小就是 所有最大對齊數(含巢狀結構體的對齊數)的整數倍。
this指標
this指標的引出
我們先來定義乙個日期類date
class date
{public:
void display(){
cout<<_year<<"-"<<_month<<"-"<<_day《對於上述類,有這樣的乙個問題:
date類中有setdate與display這樣兩個成員函式,函式體中沒有關於不同物件的區分,那當d1呼叫setdate函式時,該函式是如何知道設定d1物件,而不是設定d2物件呢?
c++中通過引入this指標解決該問題,即:c**++編譯器給每個「成員函式」增加了乙個隱藏的指標引數,讓該指標指向當前物件(函式執行時呼叫該函式的物件),在函式體中所有成員變數的操作,都是通過該指標去訪問。只不過所有的操作對使用者都是透明的,即使用者不需要來傳遞,編譯器自動完成**
this指標的特性
this指標的型別:類型別 const*
this指標只能在「成員函式」中使用
this指標本質上其實是乙個成員函式的形參,是物件呼叫成員函式時,將物件位址作為實參傳遞給this形參。所以物件中不儲存this指標。
this指標是成員函式第乙個隱含的指標形參,一般情況由編譯器通過exc暫存器自動傳遞,不需要使用者傳遞
void display(){
cout<<_year<_year《我們還要知道this指標引數則是存放在暫存器中。類的靜態成員函式因為沒有this指標這個引數,所以類的靜態成員函式也就無法呼叫類的非靜態成員變數。
那麼還有最後乙個問題,this指標能否為空指標呢?
//這是在某個類中的成員函式
void test(){
cout << "test" 《當我們呼叫change()函式時就會出錯
在第乙個函式中,沒有呼叫任何函式,可以執行。
但是在第二個函式中,此時為this(null)->_name
,this指標此時為空,那麼不能進行空指標的引用。
根據this的約定中:
如果引數個數確定,this指標通過ecx傳遞給被調函式,如果不引數確定,this指標所在的引數被壓棧後壓入堆疊。
所以總結一下,this指標可以為空,當函式內部不需要使用到this指標時,就是說此時不需要通過this指向當前物件並對其進行操作時才可以為空。但是呼叫的函式需要指向當前物件,並進行操作,則會發生錯誤,這跟c中呼叫空指標的引用錯誤性質一樣。
C 類與物件
程式設計模型 所有計算機均由兩種元素組成 和資料.精確的說,有些程式是圍繞著 什麼正在發生 而編寫,有些則是圍繞 誰正在受影響 而編寫的.抽象封裝 封裝是一種把 和 所操作的資料 在一起,使這兩者不受外界干擾和誤用的機制.繼承 繼承是指乙個物件從另乙個物件中獲得屬性的過程.是物件導向程式設計的三大原...
C 類與物件
c 類與物件 區分物件導向與面向過程 物件導向是指一種程式設計范型,同時也是一種程式開發的方法。它將物件作為程式的基本單元,將程式和資料封裝其中,以提高軟體的重用性 靈活性和擴充套件性。物件導向 利用物件間的訊息傳遞來驅動程式的執行。優點 真實表現客觀世界,物件間的關係清晰,物件間的訊息處理高效。面...
C 類與物件
類是物件導向的核心機制,是物件導向設計中對具有相同或相似性質的物件的抽象,是對資料和操作進行封裝的載體,進而保證了對資料的安全 高效 合理的訪問 物件是類的例項,是類的具體個體,對應現實世界的實體。類的定義 class 類名 void showclock 習慣上在類的宣告中只定義函式的原型,在類外定...