C 學習(一) 類與物件

2021-09-11 18:08:09 字數 2737 閱讀 8436

大二時學校開過物件導向程式設計(c++語言)的課,使用的是清華大學出版社,李愛華、程磊主編的教材。

近兩年在學習和專案中一直使用c,對於c++已經忘記得差不多了。

如今大四畢業之際開始學習qt開發上位機,需要用到c++,使用原教材再次學習一次。

類與物件是c++中兩個基本的概念。可以理解類是資料型別,物件是類定義的變數。

private私有型別:只能由本類的私有函式訪問。

protected保護型別:本類的成員函式和本類的派生類的成員函式訪問。

public公有型別:對外完全開放。

在類的定義之外定義成員函式體要使用作用於運算子「::」

例: 函式返回型別 類名::函式名(形參)

上述宣告為隱式宣告,在函式返回型別前加上關鍵字inline為顯式宣告。

例: inline 函式返回型別 類名::函式名(形參)

兩種內聯函式定義效果一樣,內聯函式的呼叫類似巨集指令的擴充套件,可直接在呼叫處擴充套件其**,而不是進行一般函式的呼叫操作。

在宣告類的同時定義物件,這時定義的物件是全域性物件。

在使用時用類名定義物件,在定義物件時可以根據給定的引數呼叫相應的建構函式進行初始化。

例: 類名 物件名(參數列);

參數列中的引數以逗號隔開

與結構體類似

物件名.成員名 or (*指向物件的指標).成員名

指向物件的指標->成員名 or (&物件名)->成員名

相同型別的物件可以直接使用賦值語句。

物件1=物件2 (當類中存在指標時不適用,需要拷貝建構函式)

建構函式是與類名相同的成員函式,建立物件時自動呼叫建構函式。

沒有返回值型別,使用者定義時不能加void。

可以過載。

public屬性,函式體可以寫在類體內也可以在類體外。

不能顯式呼叫,只能由系統自動呼叫。

帶有預設引數的建構函式 例: data(int a=1,int b=2); 定義物件時,可以提供也可以不提供引數

如果使用者定義了帶引數的建構函式(沒有預設引數),定義物件時必須提供引數,否則建構函式將不被執行

成員初始化列表

例: 類名::建構函式名(引數列表):資料成員1(初始值1),資料成員1(初始值2),…

拷貝建構函式

例: 類名::類名(const 類名 &物件名)

(1)該函式只有乙個引數,同類物件的引用

(2)每個類都必須有乙個拷貝建構函式,如果使用者沒有自定義,則系統會生成乙個預設的拷貝建構函式

在以下情況中呼叫拷貝建構函式

(1)由乙個物件初始化另乙個物件時

(2)物件作為函式的實際引數傳遞給函式的值形式時(形式引數是引用和指標時,不呼叫拷貝建構函式)。

傳參時,系統會製作乙個臨時副本儲存形參的值,中間有賦值運算。

(3)物件作為函式返回值時。

如果乙個類的資料成員包含指標,在建構函式中用指標申請了空間,這時用系統預設的拷貝建構函式初始化另乙個物件時會發生錯誤。重新定義的物件和原物件的指標成員指向了同一塊位址,這就是淺拷貝。如果要先釋放乙個物件,那麼另乙個物件的指標變成了懸掛指標。深拷貝就是會重新申請一片空間,再將值拷貝進去。

析構函式是特殊的成員函式,在物件撤銷時自動呼叫。

函式名是在類名前加上~。

沒有返回值和引數。

不能過載。

public屬性,函式體可以寫在類體內也可以在類體外。

不能顯式呼叫,只能由系統隱式呼叫。

被定義在函式體類的物件,在函式結束時呼叫析構函式,使用new運算子建立的物件,在使用delete時呼叫析構函式。

指向物件的指標

呼叫類的成員函式時,this指標自動初始化為呼叫此成員函式的物件的位址。

在成員函式體內可以使用this 指標,不需要也不能在成員函式的形參中對this指標作顯式的宣告。

this指標是乙個const指標。

this指標是乙個區域性資料,作用域僅在乙個物件的內部。

使用new運算子動態分配的物件屬於堆物件。

堆物件的生存期是整個程式的生命週期。

堆物件在使用完畢後,要及時使用delete運算子釋放。

實現在同乙個類中不同物件間的資料共享

靜態資料成員必須在類外進行初始化,預設值為0,所以在編譯時就建立並初始化了,在該類任何物件被建立時就存在,再物件建立之前可以直接訪問。

例: 類名::公有靜態資料成員名

該類所有物件的共享成員函式。

例: static 返回型別 靜態成員函式名(參數列)

靜態成員函式只能訪問靜態資料成員,不能對類的其他型別的資料成員或成員函式進行訪問。

私有靜態成員函式不能被類外部的函式和物件訪問。

靜態成員函式中沒有this 指標

友元函式由關鍵字friend修飾,友元函式能夠訪問類的私有資料成員,

友元函式不是當前類的成員函式,是乙個外部函式,但友元函式可以是其他類的成員函式。

宣告可以在類中的任何部分,定義可以在類體內也可以在類體外。

友元類也使用關鍵字friend修飾,友元類中的所有成員函式都是另乙個類的友元函式。

對於一些要防止改變的資料可以使用關鍵字const修飾。資料、函式、物件都可以修飾。

常資料成員智慧型通過初始化列表進行初始化,初始化列表中的內容可以是常量、變數和表示式。(引用資料成員同樣只能通過初始化列表初始化)

常成員函式不能修改本類的資料成員,也不能呼叫沒有用const修飾的成員函式。

常成員函式的宣告和定義都要加const修飾。

常物件在定義時必須初始化,常物件只能呼叫常成員函式。

一 類與物件

物件的儲存細節 程式啟動,先把程式載入到 區。系統自動建立乙個類物件,載入類中的物件方法列表。當通過乙個類建立物件時,先在堆中開闢一塊儲存空間給物件p,再初始化物件的各屬性為0,最後返回乙個位址儲存到棧中 區域性變數接收 物件的第0個屬性是系統建立的isa指標,指向建立該物件的類。類方法只能類呼叫,...

C 上機實驗(一) 類與物件

實驗目的和要求 1 掌握類 類的資料成員 類的成員函式的定義方式。2 理解類成員的訪問控制方式。3 掌握物件的定義和操作物件的方法。4 理解建構函式和析構函式的定義與執行過程。5 掌握過載建構函式的方法。6 了解拷貝建構函式的定義方法。實驗內容 1.1 請定義乙個矩形類 rectangle 私有資料...

IOS學習筆記 OC(一)類與物件

import int main int argc,const char argv return 0 1.oc相對於c 在c的基礎上新增了一小部分物件導向的語法 將c的複雜語法封裝的更為簡單 oc完全相容c語言 在c語言的基礎上新增了一小部分物件導向的語法 2.oc程式的原始檔的字尾名是.m m代表m...