C 類與物件

2021-09-22 14:04:06 字數 2449 閱讀 3176

類與物件的初步認識

很多語言都有這方面的區分,比如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 習慣上在類的宣告中只定義函式的原型,在類外定...