C 類與封裝不完全指北

2021-08-01 03:45:49 字數 2886 閱讀 2640

以下內容是個人平時常用的內容,在此進行總結。都是個人的見解,如果有不對或者不贊同的地方,請大家指正,互相學習!

這個學期學習了c++的有關知識,希望能夠在這裡與大家一起分享。我不想和其他 教科書一樣,一步一步一點一點介紹 c++的知識。這樣講了後面忘了前面。在我的學習過程中,我更喜歡那例子說話。所以我通過幾個題目和例子來為大家講解c++類與封裝的基本知識。

有關c++的背景啥的我就不在此一一介紹。高手們都說c++不是很好用,因為他的輸出具有不確定性等等的原因。但是作為小白倒是覺得c++很多時候用起來比c語言要順手的多。也許這就是和高手的差距吧。c++是一門物件導向的程式語言,是通過不同的類以及類與類之間的關係來實現不同物件的要求 和特徵。因此類是c++中最基礎的組成部分。

c++中的類與c語言中的結構體十分相似。但是也有不同點。當然,定義時c++是class而c語言是stract,這是最直觀的不同。其次,在c語言的結構體中,資料成員和成員函式的預設屬性為public,也就是公開,任何結構體外的函式都可以訪問到結構體中的成員。而在c++的類中,如果不特別說明,類中的資料成員和成員函式均為protected,也就是處於保護,只有public中的成員函式可以訪問並修改protected中的資料成員,其他的函式均不能訪問。這樣增加了資料成員的安全性。這是二者最顯著的區別。

private://表示一下的成員為protected型別

int x_;

public://表示一下的成員為public型別

data(int x)//建構函式①

int getvalue()

void showvalue()//用來輸出類的資料成員

//當建立類時沒有傳入引數,呼叫該建構函式

data(int aa) //當建立類時傳入乙個引數,呼叫該建構函式

data(int aa,int bb) //當建立類時傳入兩個引數,呼叫該函式

};

在main函式中不同的data定義方式會呼叫不同的建構函式。比如:

data data1;//呼叫data()

data data2(2);//呼叫data(int aa)

data data3(10,11);//呼叫data(int aa,int bb)

建構函式還可以用參數列的方式來寫,我們將上面的data類中的建構函式改寫為初始化列表的形式

class data

data(int aa):a(aa),b(0)

data(int aa,int bb):a(aa),b(bb)

};

當乙個類沒有編寫建構函式時,編譯器在編譯的過程中會自動生成建構函式,這個自動生成的建構函式會把所有的資料成員初始化為0.

②析構函式:析構函式是在乙個類生命週期結束後,刪除這個類時呼叫的。

建構函式前面不帶void,int等任何函式型別,函式名為波浪線+類名,比如data類的析構函式的函式名為~data。

一般在類中new出來的空間,需要在析構函式中delete掉。(關於new和delete,請參照其他博文)

如果沒有在類中編寫析構函式,編譯器會自動生成析構函式。

在這裡總結一下析構函式的呼叫時機:1.預設建構函式引用時。 2.返回值類的物件時。  3.用類的物件初始化另乙個物件時。   4.函式裡的引數是類的物件時。

乙個簡單的類就是有建構函式,析構函式和其他的函式比如show函式構成的。這樣就可以構成乙個能實現簡單功能的類。但是這樣的類並不能實現所有的問題,真正實際應用的類要比這個麻煩的多~~~

class time

cout<<"a student whose name is \""《靜態成員函式是屬於整個類的,它只能訪問屬於該類的靜態成員(包括靜態資料成員和靜態成員函式),不能訪問非靜態成員(包括非靜態資料成員和成員函式)。

靜態資料成員時屬於整個類的,整個類只有乙份拷貝,相當於類的全域性變數,供該類所有物件共用,能夠被該類的所有物件訪問;非靜態資料成員的是屬於物件的,每個物件都有非靜態資料成員的乙份拷貝。為該物件所用。

下面通過乙個例子來理解靜態資料成員的特點:

#include using namespace std;

class data

static int getsum()

};int data::sum = 0;

int main()

在剛剛的例子中,data1中的資料成員a的值為10,data2中的資料成員a的值為11,但是data1和data2中的sum都為2。這就是靜態資料成員最大的特點。根據這個特點,靜態資料成員一般可以用來計算某個類同時存在的個數。只需要在呼叫建構函式時+1,在呼叫析構函式時-1即可~

首先了解一下this指標的概念。this指標是用於標識乙個物件自引用的陰式指標,代表物件自身的位址。由於this指標是在不知曉的情況下,由編譯器新增到成員函式引數表中的隱含引數。所以它也稱為隱式指標。說明:1.儘管this指標是乙個隱式指標,但在類的成員函式中可以顯式地使用它 。   2.在類x的非const成員函式裡,this的型別就是x*。然而this並不是乙個常規變數,不能給他賦值,但可以通過他修改資料成員的值。在類x的const成員函式裡,this被設定成const x*型別,不能通過它修改物件的資料成員值。   3.靜態成員函式沒有this指標,因此靜態成員函式中不可以訪問物件的非靜態成員函式。

通過this返回物件位址或自引用的成員函式,通過例子來說明。

class date{

private:

int year_,month_,day_;

friend class datetime;

public:

date(int y,int m,int d):year_(y),month_(m),day_(d) { cout<<"create date : ("<

react redux不完全指北

1 首先react redux是用來在元件之間方便傳輸資料以及改變資料的工具 2 常用的react redux的方法是包含注入已經呼叫 3 首先在最外層包含注入 import from react redux 全域性包含 reactdom.render document.getelementbyid...

Ios打包不完全指北

寫這篇文章主要是給新來的新人同事,或者安卓同學,在給測試打包的時候,乙個指導作用,目前不涉及到證書的請求和安裝,如果有這方面的需求,請找老司機親自教導。這篇文章以盈峰專案管家作為樣本來解釋,因為目前沒有企業證書,這個就暫時不討論,以後有了再補充。說完了證書種類,那麼如何區分證書呢?為了區分證書我們規...

msf stagers開發不完全指北 一

上面我們給出的文章講到關於第一階段與第二階段的互動原理 上面的流程說的已經比較明白了 此篇文章裡我將採用 metasploit loader 作為 講解 向 msf 監聽位址發起 tcp 請求 獲取 stages 將 socket fd 放入暫存器 edi 從起始位址開始執行 stages 先貼 首...