最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

一、類的定義

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

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

通常,我們會(huì)將類的定義放在頭文件當(dāng)中,并將實(shí)現(xiàn)的代碼放在源代碼文件中。我們來(lái)看C++ Primer當(dāng)中的一個(gè)例子:一個(gè)關(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,它表示我們聲明的是一個(gè)類,一般類名我們使用大駝峰命名法定義。

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

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

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

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

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

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

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

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

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

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

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

二、類的實(shí)現(xiàn)

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

比如我們?cè)趕tock00.h當(dāng)中定義了一個(gè)類:

#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ù)

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

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

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

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

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

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

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

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

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

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

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

一般我們會(huì)把一些比較簡(jiǎn)短的函數(shù)在類的聲明當(dāng)中直接實(shí)現(xiàn),當(dāng)然我們也可以使用關(guān)鍵字inline,手動(dòng)指定某個(gè)函數(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++類的定義與實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)C++類的定義與實(shí)現(xiàn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言開發(fā)實(shí)現(xiàn)井字棋及電腦落子優(yōu)化示例詳解

    C語(yǔ)言開發(fā)實(shí)現(xiàn)井字棋及電腦落子優(yōu)化示例詳解

    以前上課經(jīng)常和同桌玩起井字棋,那么我們就當(dāng)我們回憶童年,現(xiàn)在也用C語(yǔ)言來(lái)實(shí)現(xiàn)井字棋,本次代碼相對(duì)于初階的井字棋,在電腦下棋代碼部分做了優(yōu)化,使得電腦更加具有威脅
    2021-11-11
  • Qt中暫停程序的幾種方法小結(jié)

    Qt中暫停程序的幾種方法小結(jié)

    本文主要介紹了Qt中暫停程序的幾種方法小結(jié),包含了4種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • C++中CSTRINGLIST用法詳解

    C++中CSTRINGLIST用法詳解

    這篇文章主要介紹了C++中CSTRINGLIST用法詳解的相關(guān)資料,需要的朋友可以參考下
    2015-06-06
  • C語(yǔ)言植物大戰(zhàn)數(shù)據(jù)結(jié)構(gòu)堆排序圖文示例

    C語(yǔ)言植物大戰(zhàn)數(shù)據(jù)結(jié)構(gòu)堆排序圖文示例

    這篇文章主要為大家介紹了C語(yǔ)言植物大戰(zhàn)數(shù)據(jù)結(jié)構(gòu)堆排序的圖文示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • win10+VS2017+Cuda10.0環(huán)境配置詳解

    win10+VS2017+Cuda10.0環(huán)境配置詳解

    這篇文章主要介紹了win10+VS2017+Cuda10.0環(huán)境配置詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 關(guān)于C語(yǔ)言除0引發(fā)的思考

    關(guān)于C語(yǔ)言除0引發(fā)的思考

    很多 C 庫(kù)都提供了一組函數(shù)用來(lái)判斷一個(gè)浮點(diǎn)數(shù)是否是無(wú)窮大或 NaN。int _isnan(double x) 函數(shù)用來(lái)判斷一個(gè)浮點(diǎn)數(shù)是否是 NaN,而 int _finite(double x) 用以判斷一個(gè)浮點(diǎn)數(shù)是否是無(wú)窮大
    2013-08-08
  • C/C++實(shí)現(xiàn)segy文件的讀取詳解

    C/C++實(shí)現(xiàn)segy文件的讀取詳解

    SEGY是地震數(shù)據(jù)一般以地震道為單位進(jìn)行組織,采用SEG-Y文件格式存儲(chǔ)。標(biāo)準(zhǔn)SEGY文件一般包括三部分:卷頭、道頭與地震道數(shù)據(jù)。本文將介紹利用C++讀取segy文件的方法,感興趣的可以了解一下
    2022-03-03
  • C++中memset函數(shù)用法詳解

    C++中memset函數(shù)用法詳解

    這篇文章主要介紹了C++中memset函數(shù)用法,結(jié)合實(shí)例形式詳細(xì)分析了memset函數(shù)的功能、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2016-06-06
  • C++ 實(shí)現(xiàn)對(duì)象的克隆 (多種方法)

    C++ 實(shí)現(xiàn)對(duì)象的克隆 (多種方法)

    在 C++ 中,對(duì)象的克隆通常通過實(shí)現(xiàn)一個(gè)克隆接口來(lái)完成,該接口允許創(chuàng)建對(duì)象的深拷貝,下面是實(shí)現(xiàn)對(duì)象克隆的幾種方法,具體取決于需要克隆的對(duì)象類型和上下文,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • C語(yǔ)言實(shí)現(xiàn)AT指令A(yù)SCII碼的拼接處理流程

    C語(yǔ)言實(shí)現(xiàn)AT指令A(yù)SCII碼的拼接處理流程

    今天小編就為大家分享一篇關(guān)于C語(yǔ)言實(shí)現(xiàn)AT指令A(yù)SCII碼的拼接處理流程,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12

最新評(píng)論

长春市| 盐城市| 南安市| 鸡西市| 新沂市| 会昌县| 吉水县| 鄢陵县| 铜陵市| 中牟县| 湖南省| 金溪县| 夏邑县| 镇赉县| 民乐县| 长沙县| 无极县| 拉萨市| 门源| 黄陵县| 兴安县| 天长市| 凤山市| 湘阴县| 阿鲁科尔沁旗| 阿瓦提县| 汉川市| 烟台市| 加查县| 遂川县| 夏河县| 顺昌县| 隆尧县| 汉寿县| 云龙县| 利津县| 来宾市| 洛南县| 漳浦县| 白水县| 佳木斯市|