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

C++深入探索類(lèi)真正的形態(tài)之struct與class

 更新時(shí)間:2022年04月20日 16:58:31   作者:清風(fēng)自在?流水潺潺  
前邊我們所定義的類(lèi),均是使用struct關(guān)鍵字來(lái)定義,但是C++中真正用于定義類(lèi)的關(guān)鍵字為class,因?yàn)橐狢++兼容C,所以保留struct關(guān)鍵字,struct與class的用法完全相同

一、類(lèi)的關(guān)鍵字

  • struct 在 C 語(yǔ)言中已經(jīng)有了自己的含義,必須繼續(xù)兼容
  • 在C++ 中提供了新的關(guān)鍵字 class 用于類(lèi)定義
  • class 和 struct 的用法是完全相同的
  • 在用 struct 定義類(lèi)時(shí),所有成員的默認(rèn)訪問(wèn)級(jí)別為 public
  • 在用 class 定義類(lèi)時(shí),所有成員的默認(rèn)訪問(wèn)級(jí)別為 private

如下:

下面看一段使用 class 的代碼:

#include <stdio.h>
 
struct A
{
    // defualt to public
    int i;
    // defualt to public
    int getI()
    {
        return i;
    }
};
 
class B
{
    // defualt to private
    int i;
    // defualt to private
    int getI()
    {
        return i;
    }
};
 
int main()
{
    A a;
    B b;
    
    a.i = 4;
    
    printf("a.getI() = %d\n", a.getI());
    
    b.i = 4;
    
    printf("b.getI() = %d\n", b.getI());
    
    return 0;
}

下面為輸出結(jié)果,運(yùn)行報(bào)錯(cuò),指出 class 聲明的類(lèi),所有成員的默認(rèn)訪問(wèn)級(jí)別為 private

在 class B 里面加個(gè) public 即可,如下:

class B
{
public:
    // defualt to private
    int i;
    // defualt to private
    int getI()
    {
        return i;
    }
};

下面為輸出結(jié)果:

二、類(lèi)的真正形態(tài)

C++ 中的類(lèi)支持聲明和實(shí)現(xiàn)的分離

將類(lèi)的實(shí)現(xiàn)和定義分開(kāi)

  • .h頭文件中只有類(lèi)的聲明
  • 成員變量和成員函數(shù)的聲明
  • .cpp源文件中完成類(lèi)的其它實(shí)現(xiàn)
  • 成員函數(shù)的具體實(shí)現(xiàn)

三、小實(shí)例

需求:開(kāi)發(fā)一個(gè)用于四則運(yùn)算的類(lèi)

提供 setOperator 函數(shù)設(shè)置運(yùn)算類(lèi)型

提供 setParameter 函數(shù)設(shè)置運(yùn)算參數(shù)

提供 result 函數(shù)進(jìn)行運(yùn)算

  • 其返回值表示運(yùn)算的合法性
  • 通過(guò)引用參數(shù)返回結(jié)果

代碼如下:

Operator.h

#ifndef _OPERATOR_H_
#define _OPERATOR_H_
class Operator
{
private:
    char mOp;
 
    double mP1;
 
    double mP2;
public:
    bool setOperator(char op);
 
    void setParameter(double p1, double p2);
 
    bool result(double& r);
};
#endif

Operator.cpp

#include "Operator.h"
bool Operator::setOperator(char op)
{
    bool ret = false;
    if( (op == '+') || (op == '-') || (op == '*') || (op == '/') )
 
    {
        ret = true;
 
        mOp = op;
    }
    else
    {
        mOp = '\0';
 
    }
    return ret;
}
void Operator::setParameter(double p1, double p2)
 
{
    mP1 = p1;
 
    mP2 = p2;
}
bool Operator::result(double& r)
 
{
    bool ret = true;
    switch( mOp )
    {
        case '/':
 
            if( (-0.000000001 < mP2) && (mP2 < 0.000000001) )
 
            {
 
                ret = false;
 
            }
 
            else
 
            {
 
                r = mP1 / mP2;
 
            }
 
            break;
 
        case '+':
 
            r = mP1 + mP2;
 
            break;
 
        case '*':
 
            r = mP1 * mP2;
 
            break;
 
        case '-':
 
            r = mP1 - mP2;
 
            break;
 
        default:
 
            ret = false;
 
            break;
    }
    return ret;
}

test.cpp

#include <stdio.h>
#include "Operator.h"
 
int main()
{
    Operator op;
    double r = 0;
    
    op.setOperator('/');
    op.setParameter(9, 3);
    
    if( op.result(r) )
    {
        printf("r = %lf\n", r);
    }
    else
    {
        printf("Calculate error!\n");
    }
    
    return 0;
}

下面為輸出結(jié)果:

四、小結(jié)

C++ 引進(jìn)了新的關(guān)鍵字 class 用于定義類(lèi)

struct 和 class 的區(qū)別在于默認(rèn)訪問(wèn)級(jí)別的不同

C++ 中的類(lèi)支持聲明和實(shí)現(xiàn)的分離

  • 在頭文件中聲明類(lèi)
  • 在源文件中實(shí)現(xiàn)類(lèi)

到此這篇關(guān)于C++深入探索類(lèi)真正的形態(tài)是的文章就介紹到這了,更多相關(guān)C++類(lèi)的形態(tài)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Matlab繪制中國(guó)地圖超全教程詳解

    Matlab繪制中國(guó)地圖超全教程詳解

    這篇文章主要介紹了如何利用Matlab繪制中國(guó)地圖,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Matlab有一定的幫助,感興趣的小伙伴可以學(xué)習(xí)一下
    2022-02-02
  • C語(yǔ)言根據(jù)協(xié)議分割獲取字符串單元的實(shí)現(xiàn)代碼

    C語(yǔ)言根據(jù)協(xié)議分割獲取字符串單元的實(shí)現(xiàn)代碼

    今天小編就為大家分享一篇關(guān)于C語(yǔ)言根據(jù)協(xié)議分割獲取字符串單元的實(shí)現(xiàn)代碼,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • 深入解讀C++ 內(nèi)聯(lián)函數(shù)inline|nullptr

    深入解讀C++ 內(nèi)聯(lián)函數(shù)inline|nullptr

    內(nèi)聯(lián)函數(shù):用** inline 修飾的函數(shù)叫做內(nèi)聯(lián)函數(shù),編譯時(shí)C++編譯器會(huì)在調(diào)用的地方展開(kāi)內(nèi)聯(lián)函數(shù)**,這樣調(diào)用內(nèi)聯(lián)函數(shù)就需要?jiǎng)?chuàng)建棧楨,就提高效率了,這篇文章給大家介紹C++ 內(nèi)聯(lián)函數(shù)inline|nullptr的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • C++多重繼承與虛繼承分析

    C++多重繼承與虛繼承分析

    這篇文章主要介紹了C++多重繼承與虛繼承分析,是面向?qū)ο蟪绦蛟O(shè)計(jì)非常重要的知識(shí)點(diǎn),需要的朋友可以參考下
    2014-08-08
  • 利用Qt實(shí)現(xiàn)獲取計(jì)算機(jī)的硬件信息

    利用Qt實(shí)現(xiàn)獲取計(jì)算機(jī)的硬件信息

    在開(kāi)發(fā)時(shí),常常會(huì)需要用到計(jì)算機(jī)的相關(guān)信息。利用這些信息,我們可以開(kāi)發(fā)一些輔助模塊。本文將利用Qt實(shí)現(xiàn)獲取計(jì)算機(jī)的硬件信息,感興趣的可以嘗試一下
    2022-12-12
  • C語(yǔ)言中scanf的用法舉例

    C語(yǔ)言中scanf的用法舉例

    本節(jié)介紹輸入函數(shù)?scanf?的用法,scanf?和?printf?一樣,非常重要,而且用得非常多,所以一定要掌握,這篇文章主要介紹了C++中scanf的用法舉例,需要的朋友可以參考下
    2022-11-11
  • C語(yǔ)言實(shí)現(xiàn)循環(huán)單鏈表的示例代碼

    C語(yǔ)言實(shí)現(xiàn)循環(huán)單鏈表的示例代碼

    這篇文章主要給大家詳細(xì)介紹了C語(yǔ)言如何實(shí)現(xiàn)循環(huán)單鏈表,文章通過(guò)代碼示例講解的非常詳細(xì),對(duì)我們的學(xué)習(xí)或工作有一定的參考價(jià)值,感興趣的小伙伴跟著小編一起來(lái)看看吧
    2023-08-08
  • c++引用傳參和指針傳參的區(qū)別及說(shuō)明

    c++引用傳參和指針傳參的區(qū)別及說(shuō)明

    這篇文章主要介紹了c++引用傳參和指針傳參的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • VisualStudio2022 cmake配置opencv開(kāi)發(fā)環(huán)境

    VisualStudio2022 cmake配置opencv開(kāi)發(fā)環(huán)境

    本文主要介紹了VisualStudio2022 cmake配置opencv開(kāi)發(fā)環(huán)境,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • C++中std::thread{}和std::thread()用法

    C++中std::thread{}和std::thread()用法

    std::thread{}和std::thread()在C++中都可以用于創(chuàng)建線程對(duì)象,但std::thread{}作為C++11引入的統(tǒng)一初始化,更推薦使用,因?yàn)樗踩?、更易讀,且避免了隱式類(lèi)型轉(zhuǎn)換
    2024-11-11

最新評(píng)論

新丰县| 安仁县| 石阡县| 麻江县| 永顺县| 桐庐县| 乐陵市| 东安县| 寻甸| 和田县| 屏南县| 定西市| 清苑县| 水富县| 成安县| 兴文县| 邯郸县| 将乐县| 祁连县| 孝昌县| 墨江| 新津县| 苏州市| 天全县| 乌海市| 新建县| 龙川县| 西城区| 泾源县| 广河县| 西盟| 广宗县| 河津市| 中卫市| 西昌市| 陇川县| 阳春市| 济宁市| 延津县| 云梦县| 伊金霍洛旗|