亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++類的定義與實現(xiàn)

 更新時間:2022年01月02日 10:54:41   作者:?梁唐  
這篇文章主要介紹了C++類的定義與實現(xiàn),違章圍繞C++類的定義的相關(guān)資料展開全文內(nèi)容,具有一定的參考價值,需要的小伙伴可以參考一下

文章轉(zhuǎn)自 微信公眾號:Coder梁(ID:Coder_LT)

一、類的定義

根據(jù)C++ Primer中的描述,類的定義是一種將抽象轉(zhuǎn)換為用戶定義類型的C++工具。也就是說類的實質(zhì)是一種用戶自定義類型,它可以將數(shù)目表示和操作數(shù)據(jù)的方法組合成一個整潔的包。

在實際開發(fā)當(dāng)中,想要實現(xiàn)一個類,并編寫一個使用它的程序是相對比較復(fù)雜的,涉及多個步驟。

通常,我們會將類的定義放在頭文件當(dāng)中,并將實現(xiàn)的代碼放在源代碼文件中。我們來看C++ Primer當(dāng)中的一個例子:一個關(guān)于股票買賣的類。

首先是類的定義,寫在stock00.h文件中:

#ifndef STOCK00_H_
#define STOCK00_H_

#include <string>

class Stock {
? ? private:
? ? ?std::string company;
? ? ?long shares;
? ? ?double share_val;
? ? ?double total_val;
? ? ?void set_tot() {total_val = shares * share_val;}
? ? public:
? ? ?void accquire(const std::string &co, long n, double pr);
? ? ?void buy(long num, double price);
? ? ?void sell(long num, double price);
? ? ?void update(double price);
? ? ?void show();
};
#endif

首先是關(guān)鍵字class,它表示我們聲明的是一個類,一般類名我們使用大駝峰命名法定義。

其次在這個類的定義當(dāng)中,我們看到了兩個新出現(xiàn)的關(guān)鍵字privatepublic。這兩個關(guān)鍵字描述了對類成員的訪問控制,使用類對象的程序,都可以直接訪問公有部分(public),但無法訪問對象的私有成員。

想要獲取私有成員,只能通過公有的成員函數(shù)。比如在上面這個例子當(dāng)中,我們想要修改share_val只能通過公有的方法sellbuy,而無法直接對變量的值進行修改。防止程序直接訪問數(shù)據(jù)修改數(shù)據(jù)被稱為數(shù)據(jù)隱藏。

除了publicprivate,C++當(dāng)中還提供了第三個關(guān)鍵字叫做protected,這個關(guān)鍵字和類的繼承有關(guān),我們將會在之后的文章當(dāng)中進行討論。

數(shù)據(jù)隱藏的思想其實是認為類中的成員變量的所有權(quán)應(yīng)該屬于類本身,當(dāng)我們需要對類中的數(shù)據(jù)進行讀取和修改的時候,應(yīng)當(dāng)通過類提供的公開方法,而不是直接操作類中值。這被認為是一種面向?qū)ο蟮乃枷?,即只能通過類提供的方法訪問數(shù)據(jù),而不應(yīng)該直接訪問數(shù)據(jù)。

C++正是基于這種面向?qū)ο蟮乃枷朐O(shè)計的,所以類中的成員默認是private的,我們可以省去private關(guān)鍵字:

class World {
? ? float mass;
? ? char name[30];

public:
? ? void tellall();
? ? ...
};

我們從類的描述看上去很像是包含了成員函數(shù)以及數(shù)據(jù)隱藏的結(jié)構(gòu)體,但實際上這是因為C++對結(jié)構(gòu)體進行了拓展,讓它具有了和類相同的特性。在C語言當(dāng)中,結(jié)構(gòu)體是沒有這么多特性的。

比如我們可以給結(jié)構(gòu)體設(shè)計構(gòu)造函數(shù),也可以給結(jié)構(gòu)體添加成員函數(shù),甚至結(jié)構(gòu)體也可以繼承、派生和多態(tài)。

它們之間唯一的區(qū)別是,結(jié)構(gòu)體的默認類型是public,而類是private。所以通常使用類來實現(xiàn)對象,而結(jié)構(gòu)體只用來結(jié)構(gòu)化地存儲數(shù)據(jù)。

另外多說一句,數(shù)據(jù)隱藏的面向?qū)ο罄砟畈⒉贿m用于所有語言。比如Python,Python當(dāng)中的類中的成員變量默認是public,且沒有private關(guān)鍵字。

二、類的實現(xiàn)

當(dāng)我們完成了類定義之后, 還需要來實現(xiàn)類當(dāng)中的函數(shù)。

比如我們在stock00.h當(dāng)中定義了一個類:

#ifndef STOCK00_H_
#define STOCK00_H_

#include <string>

class Stock {
? ? private:
? ? ?std::string company;
? ? ?long shares;
? ? ?double share_val;
? ? ?double total_val;
? ? ?void set_tot() {total_val = shares * share_val;}
? ? public:
? ? ?void accquire(const std::string &co, long n, double pr);
? ? ?void buy(long num, double price);
? ? ?void sell(long num, double price);
? ? ?void update(double price);
? ? ?void show();
};
#endif

1.成員函數(shù)

在這個定義當(dāng)中,我們只是聲明了函數(shù),并沒有具體實現(xiàn)函數(shù)的邏輯。

我們通常會在同名的cpp文件當(dāng)中實現(xiàn),實現(xiàn)的時候,需要使用作用域解析運算符來表示函數(shù)所屬的類:

void Stock::update(double price) {
? ? ...
}

這樣就表明了update函數(shù)所屬Stock這個類,這也就意味著我們可以創(chuàng)建屬于其他類的同名函數(shù):

void Buffoon::update() {
? ? ...
}

其次,我們在成員函數(shù)當(dāng)中,可以訪問private限定的成員變量。比如說在show函數(shù)當(dāng)中,我們可以這樣實現(xiàn):

void Stock::show() {
? ? std::cout << company << shares << share_val << total_val << endl;
}

雖然company,shares都是類的私有成員,但在成員方法當(dāng)中,一樣可以正常訪問。

再次,我們在成員方法當(dāng)中調(diào)用另外一個成員方法,可以不需要解析運算符。比如我們要在show函數(shù)內(nèi)調(diào)用update函數(shù),直接使用update()即可,而無需前面的Stock::。

2.內(nèi)聯(lián)函數(shù)

我們再回過頭來看一下Stock這個類的定義,在類的定義當(dāng)中,有一個叫做set_tot的函數(shù)。我們直接在類當(dāng)中實現(xiàn)了邏輯。雖然同樣是成員函數(shù),但是在類當(dāng)中直接實現(xiàn)的函數(shù)是有所區(qū)別的。在類聲明當(dāng)中實現(xiàn)的函數(shù),會被視為是內(nèi)聯(lián)函數(shù)。

一般我們會把一些比較簡短的函數(shù)在類的聲明當(dāng)中直接實現(xiàn),當(dāng)然我們也可以使用關(guān)鍵字inline,手動指定某個函數(shù)是內(nèi)聯(lián)的。

class Stock {
? ? private:
? ? void set_tot();
? ? public:
? ? ...
};

inline void Stock::set_tot() {
? ? total_val = shares * share_val;
}

到此這篇關(guān)于C++類的定義與實現(xiàn)的文章就介紹到這了,更多相關(guān)C++類的定義與實現(xiàn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • QT實現(xiàn)自定義Http客戶端的示例代碼

    QT實現(xiàn)自定義Http客戶端的示例代碼

    這篇文章主要為大家詳細介紹了QT如何實現(xiàn)自定義Http客戶端的,可以實現(xiàn)支持get,post請求方式;支持連接超時處理;支持網(wǎng)絡(luò)錯誤,嘗試重連等功能,感興趣的小伙伴可以學(xué)習(xí)一下
    2022-11-11
  • c++中struct使用注意事項

    c++中struct使用注意事項

    本文通過2個小示例給大家展示了一下c++中struct使用的注意事項,希望對大家學(xué)習(xí)C++能夠有所幫助。
    2016-01-01
  • C++ 11 std::function和std::bind使用詳解

    C++ 11 std::function和std::bind使用詳解

    這篇文章主要介紹了C++ 11 std::function和std::bind使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • C語言中求余運算符的使用解讀

    C語言中求余運算符的使用解讀

    這篇文章主要介紹了C語言中求余運算符的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 堆基本操作實現(xiàn)最大堆

    堆基本操作實現(xiàn)最大堆

    這篇文章主要介紹了堆基本操作實現(xiàn)最大堆,需要的朋友可以參考下
    2014-02-02
  • Mac OS X 10.8 中編譯APUE(Unix環(huán)境高級編程)的源代碼過程

    Mac OS X 10.8 中編譯APUE(Unix環(huán)境高級編程)的源代碼過程

    這篇文章主要介紹了Mac OS X 10.8 中編譯APUE(Unix環(huán)境高級編程)的源代碼過程,對于用MAC學(xué)習(xí)Unix環(huán)境高級編程的同學(xué)會有些作用,需要的朋友可以參考下
    2014-09-09
  • C語言中對字母進行大小寫轉(zhuǎn)換的簡單方法

    C語言中對字母進行大小寫轉(zhuǎn)換的簡單方法

    這篇文章主要介紹了C語言中對字母進行大小寫轉(zhuǎn)換的簡單方法,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-08-08
  • C++實現(xiàn)LeetCode(51.N皇后問題)

    C++實現(xiàn)LeetCode(51.N皇后問題)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(51.N皇后問題),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • Qt實現(xiàn)驗證碼相關(guān)功能的代碼示例

    Qt實現(xiàn)驗證碼相關(guān)功能的代碼示例

    驗證碼的原理基于人類視覺和計算機視覺的差異性,通過給用戶顯示一些難以被機器識別的圖形或文字,讓用戶進行人機交互,確認自己的身份,這樣可以有效保護網(wǎng)站安全,所以本給大家介紹了Qt實現(xiàn)驗證碼相關(guān)功能的代碼示例,感興趣的朋友可以參考下
    2024-01-01
  • 解決C++ 無法從void 轉(zhuǎn)換為LRESULT的方法詳解

    解決C++ 無法從void 轉(zhuǎn)換為LRESULT的方法詳解

    本篇文章是對C++中無法從void轉(zhuǎn)換為LRESULT的解決方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05

最新評論