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

C++ 中封裝的含義和簡單實(shí)現(xiàn)方式

 更新時(shí)間:2022年07月25日 09:57:45   作者:止步聽風(fēng)  
這篇文章主要介紹了C++ 中封裝的含義和簡單實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

其實(shí)封裝并不是編程中的一個(gè)思想,對(duì)于很多領(lǐng)域來說都是這樣。對(duì)于電子器件來說,我們不關(guān)心其內(nèi)部的結(jié)構(gòu),只在乎該器件能夠?qū)崿F(xiàn)什么樣的功能。這樣對(duì)于顧客來說,不用花時(shí)間研究內(nèi)部的實(shí)現(xiàn)過程,而對(duì)于商家來說,也可以更好的保護(hù)它們的商業(yè)秘密。

而對(duì)于 C++ 來說也是這樣,借由數(shù)據(jù)類型也可以實(shí)現(xiàn)封裝。這樣做的好處就是對(duì)外屏蔽了功能實(shí)現(xiàn),對(duì)內(nèi)開放了數(shù)據(jù)權(quán)限。

C++ 中的類和對(duì)象是經(jīng)由 C 中的 struct 發(fā)展而來的,就好像 struct 是由數(shù)組發(fā)展而來的一樣。因此我們可以先通過 struct 實(shí)現(xiàn)封裝。

封裝實(shí)現(xiàn)

#include <iostream>
?
using std::cout;
using std::endl;
?
typedef struct complex
{
? ? int x;
? ? int y;
}COMP;
?
void init(COMP &tmp,int x,int y)
{
? ? tmp.x = x;
? ? tmp.y = y;
}
?
COMP * operator +(COMP &tmp1,COMP &tmp2)
{
? ? COMP *p = static_cast<COMP *>(new COMP);
? ? p->x = tmp1.x + tmp2.x;
? ? p->y = tmp1.y + tmp2.y;
? ? return p;
}
?
COMP * operator -(COMP &tmp1,COMP &tmp2)
{
? ? COMP *p = static_cast<COMP *>(new COMP);
? ? p->x = tmp1.x - tmp2.x;
? ? p->y = tmp1.y - tmp2.y;
? ? return p;
}
?
COMP * operator *(COMP &tmp1,COMP &tmp2)
{
? ? COMP *p = static_cast<COMP *>(new COMP);
? ? p->x = tmp1.x*tmp2.x - tmp1.y*tmp2.y;
? ? p->y = tmp1.x*tmp2.y + tmp1.y*tmp2.x;
? ? return p;
}
?
int main()
{
? ? COMP x,y;
? ? init(x,1,2);
? ? init(y,3,4);
? ? cout<<x.x<<" "<<x.y<<endl;
? ? cout<<y.x<<" "<<y.y<<endl;
?
? ? COMP *z;
? ? z = x+y;
? ? cout<<z->x<<" "<<z->y<<endl;
? ? delete z;
?
? ? z = x-y;
? ? cout<<z->x<<" "<<z->y<<endl;
? ? delete z;
?
? ? z = x*y;
? ? cout<<z->x<<" "<<z->y<<endl;
? ? delete z;
?
? ? return 0;
}

結(jié)果為:

1 2
3 4
4 6
-2 -2
-5 10

上面的程序使用 struct 構(gòu)建了類似復(fù)數(shù)的結(jié)果,并使用運(yùn)算符重載實(shí)現(xiàn)了復(fù)數(shù)的加、減、乘運(yùn)算。這樣如果我們要進(jìn)行復(fù)數(shù)的運(yùn)算的話,可以直接使用 +-* 而不用具體關(guān)心內(nèi)部的實(shí)現(xiàn)過程,因?yàn)槲覀冊(cè)谝獾闹皇墙Y(jié)果的正確性。

封裝屬性

封裝的作用就像之前提到的那樣:對(duì)外提供接口,對(duì)內(nèi)提供數(shù)據(jù)。

雖然上邊的函數(shù)在全局構(gòu)建了接口函數(shù),但是卻也暴露了函數(shù)的實(shí)現(xiàn)過程,并且我們還能夠在外部直接訪問 struct 內(nèi)的數(shù)據(jù),這并不是我們想要的封裝形式。這是由 struct 的性質(zhì)決定的,在 C++ 中,提供了 class 的形式實(shí)現(xiàn)整個(gè)的封裝過程。

struct 和 class 的不同在于,struct 中的數(shù)據(jù)和方法都是 public 的,而 class 中的數(shù)據(jù)和方法卻是可以自定義的:

 

屬性內(nèi)部外部
publicyes

yes

protectedyesno
privateyesno

protected 和 private 的區(qū)別在繼承形式上。

class 封裝

對(duì)于上邊的 complex,如果使用 class 來封裝:

#include <iostream>
 
using std::cout;
using std::endl;
 
class complex
{
public:
    complex()
    {
        this->x = 0;
        this->y = 0;
    }
 
    complex(int x, int y):x(x),y(y){}
 
    complex * operator +(complex &tmp)
    {
        complex *p = static_cast<complex *>(new complex);
        p->x = this->x + tmp.x;
        p->y = this->y + tmp.y;
        return p;
    }
 
    complex * operator -(complex &tmp)
    {
        complex *p = static_cast<complex *>(new complex);
        p->x = this->x - tmp.x;
        p->y = this->y - tmp.y;
        return p;
    }
 
    complex * operator *(complex &tmp)
    {
        complex *p = static_cast<complex *>(new complex);
        p->x = this->x*tmp.x - this->y*tmp.y;
        p->y = this->x*tmp.y + this->y*tmp.x;
        return p;
    }
 
    void display()
    {
        cout<<this->x<<" "<<this->y<<endl;
    }
 
private:
    int x;
    int y;
};
 
 
int main()
{
    complex x(1,2),y(3,4);
    x.display();
    y.display();
 
    complex *z;
    z = x+y;
    z->display();
    delete z;
 
    z = x-y;
    z->display();
    delete z;
 
    z = x*y;
    z->display();
    delete z;
 
    return 0;
}

結(jié)果為:

1 2
3 4
4 6
-2 -2
-5 10

上邊的程序使用 class 的概念封裝了 complex 的形式,該形式下能夠從外部調(diào)用對(duì)象的方法,但是卻不能夠從外部訪問對(duì)象的數(shù)據(jù),達(dá)到了封裝的要求。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 基于C語言字符串函數(shù)的一些使用心得

    基于C語言字符串函數(shù)的一些使用心得

    以下是對(duì)C語言中字符串函數(shù)的一些使用心得進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下
    2013-08-08
  • c語言strftime時(shí)間格式化示例

    c語言strftime時(shí)間格式化示例

    C/C++程序中需要程序顯示當(dāng)前時(shí)間,可以使用標(biāo)準(zhǔn)函數(shù)strftime,本文提供一個(gè)示例供大家參考
    2014-02-02
  • C語言實(shí)現(xiàn)學(xué)生成績管理系統(tǒng)

    C語言實(shí)現(xiàn)學(xué)生成績管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)學(xué)生成績管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C++程序代碼優(yōu)化的方法實(shí)例大全

    C++程序代碼優(yōu)化的方法實(shí)例大全

    優(yōu)化是一個(gè)非常大的主題,本文并不是去深入探討性能分析理論,算法的效率,這篇文章主要給大家介紹了關(guān)于C++代碼優(yōu)化的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • C++入門基礎(chǔ)之命名空間、輸入輸出和缺省參數(shù)

    C++入門基礎(chǔ)之命名空間、輸入輸出和缺省參數(shù)

    C++入門基礎(chǔ)篇的內(nèi)容為C++的基本特性,只有在掌握C++的基本特性后,是進(jìn)入后面類和對(duì)象學(xué)習(xí)的基礎(chǔ),下面這篇文章主要給大家介紹了關(guān)于C++入門基礎(chǔ)之命名空間、輸入輸出和缺省參數(shù)的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • VC6.0常用快捷鍵大全

    VC6.0常用快捷鍵大全

    這篇文章主要介紹了VC6.0常用快捷鍵大全,非常實(shí)用,需要的朋友可以參考下
    2014-08-08
  • OpenCV mask的作用及如何制作掩模mask

    OpenCV mask的作用及如何制作掩模mask

    mask 不是馬斯克,是掩膜,可以用來遮蓋非感興趣區(qū),突出感興趣區(qū),使得圖像處理只專注于ROI部分,OpenCV中的很多函數(shù)用到mask,mask是什么?怎么制作一個(gè)mask?本文給大家分享OpenCV mask的作用及如何制作掩模mask,感興趣的朋友一起看看吧
    2023-02-02
  • 史上最強(qiáng)C語言分支和循環(huán)教程詳解

    史上最強(qiáng)C語言分支和循環(huán)教程詳解

    這篇文章主要介紹了史上最強(qiáng)C語言分支和循環(huán)教程詳解,本文通過代碼演示給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11
  • 一文帶你了解C++中deque的使用

    一文帶你了解C++中deque的使用

    C++中的deque是一種雙端隊(duì)列,可以在隊(duì)列的前端和后端進(jìn)行插入元素和刪除操作,同時(shí)可以視作一個(gè)長度不定的數(shù)組,支持高效的插入和刪除操作。本篇文章將深入探討C++中的deque的使用,感興趣的可以了解一下
    2023-05-05
  • 使用代碼驗(yàn)證linux子進(jìn)程與父進(jìn)程的關(guān)系

    使用代碼驗(yàn)證linux子進(jìn)程與父進(jìn)程的關(guān)系

    Linux下父進(jìn)程可以使用fork 函數(shù)創(chuàng)建子進(jìn)程,但是當(dāng)父進(jìn)程先退出后,子進(jìn)程會(huì)不會(huì)也退出呢?通過下面這個(gè)小實(shí)驗(yàn),我們能夠很好的看出來
    2014-02-02

最新評(píng)論

黑水县| 建始县| 津市市| 清丰县| 桐梓县| 江油市| 金乡县| 商洛市| 慈利县| 泸溪县| 龙陵县| 阳曲县| 朝阳市| 外汇| 黔江区| 石门县| 鄄城县| 平凉市| 台东市| 会理县| 唐河县| 新津县| 延安市| 石渠县| 雷山县| 客服| 贵州省| 木兰县| 泸西县| 渝北区| 田林县| 美姑县| 阿图什市| 台东县| 杭锦旗| 大余县| 枣强县| 霍邱县| 荃湾区| 泰顺县| 隆林|