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

深入解析C++編程中類(lèi)的封裝特性

 更新時(shí)間:2015年09月16日 15:56:55   投稿:goldensun  
這篇文章主要介紹了深入解析C++編程中類(lèi)的封裝特性,是C++入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下

共用接口和私有實(shí)現(xiàn)的分離

C++通過(guò)類(lèi)來(lái)實(shí)現(xiàn)封裝性,把數(shù)據(jù)和與這些數(shù)據(jù)有關(guān)的操作封裝在一個(gè)類(lèi)中,或者說(shuō),類(lèi)的作用是把數(shù)據(jù)和算法封裝在用戶(hù)聲明的抽象數(shù)據(jù)類(lèi)型中。

實(shí)際上用戶(hù)往往并不關(guān)心類(lèi)的內(nèi)部是如何實(shí)現(xiàn)的,而只需知道調(diào)用哪個(gè)函數(shù)會(huì)得到什么結(jié)果,能實(shí)現(xiàn)什么功能即可。

在聲明了一個(gè)類(lèi)以后,用戶(hù)主要是通過(guò)調(diào)用公用的成員函數(shù)來(lái)實(shí)現(xiàn)類(lèi)提供的功能(例如對(duì)數(shù)據(jù)成員設(shè)置值,顯示數(shù)據(jù)成員的值,對(duì)數(shù)據(jù)進(jìn)行加工等)。因此,公用成員函數(shù)是用戶(hù)使用類(lèi)的公用接口(public interface),或者說(shuō)是類(lèi)的對(duì)外接口。

類(lèi)中被操作的數(shù)據(jù)是私有的,實(shí)現(xiàn)的細(xì)節(jié)對(duì)用戶(hù)是隱蔽的,這種實(shí)現(xiàn)稱(chēng)為私有實(shí)現(xiàn)(private implementation)。這種“類(lèi)的公用接口與私有實(shí)現(xiàn)的分離”形成了信息隱蔽。

軟件工程的一個(gè)最基本的原則就是將接口與實(shí)現(xiàn)分離,信息隱蔽是軟件工程中一個(gè)非常重要的概念。它的好處在于:
如果想修改或擴(kuò)充類(lèi)的功能,只需修改本類(lèi)中有關(guān)的數(shù)據(jù)成員和與它有關(guān)的成員函數(shù),程序中類(lèi)外的部分可以不必修改。
如果在編譯時(shí)發(fā)現(xiàn)類(lèi)中的數(shù)據(jù)讀寫(xiě)有錯(cuò),不必檢查整個(gè)程序,只需檢查本類(lèi)中訪問(wèn)這些數(shù)據(jù)的少數(shù)成員函數(shù)。
類(lèi)聲明和成員函數(shù)的分離

在面向?qū)ο蟮某绦蜷_(kāi)發(fā)中,一般做法是將類(lèi)的聲明(其中包含成員函數(shù)的聲明)放在指定的頭文件中,用戶(hù)如果想用該類(lèi),只要把有關(guān)的頭文件包含進(jìn)來(lái)即可。

由于在頭文件中包含了類(lèi)的聲明,因此在程序中就可以用該類(lèi)來(lái)定義對(duì)象。由于在類(lèi)體中包含了對(duì)成員函數(shù)的聲明,在程序中就可以調(diào)用這些對(duì)象的公用成員函數(shù)。

為了實(shí)現(xiàn)上一節(jié)所敘述的信息隱蔽,對(duì)類(lèi)成員函數(shù)的定義一般不放在頭文件中,而另外放在一個(gè)文件中。

例如,可以分別寫(xiě)兩個(gè)文件:
student.h頭文件

//這是student.h頭文件,在此文件中進(jìn)行類(lèi)的聲明
class Student //類(lèi)聲明
{
  public :
  void display( );//公用成員函數(shù)原型聲明
  private :
  int num;
  char name[20];
  char sex;
};

student.cpp

// 在此文件中進(jìn)行函數(shù)的定義
#include <iostream>
#include "student.h"http://不要漏寫(xiě)此行,否則編譯通不過(guò)
void Student::display()//在類(lèi)外定義display類(lèi)函數(shù)
{
  cout<<"num:"<<num<<endl;
  cout<<"name:"<<name<<endl;
  cout<<"sex:"<<sex<<endl;
}

為了組成一個(gè)完整的源程序,還應(yīng)當(dāng)有包括主函數(shù)的源文件(main.cpp):

// 主函數(shù)模塊
#include <iostream>
#include ″student.h″ //將類(lèi)聲明頭文件包含進(jìn)來(lái)
int main( )
{
  Student stud; //定義對(duì)象
  stud.display( ); //執(zhí)行stud對(duì)象的display函數(shù)
  return 0;
}

這是一個(gè)包括3個(gè)文件的程序,組成兩個(gè)文件模塊:一個(gè)是主模塊main.cpp,一個(gè)是student.cpp。在主模塊中又包含頭文件student.h。在預(yù)編譯時(shí)會(huì)將頭文件student.h中的內(nèi)容取代#include ″student.h″行。

請(qǐng)注意,由于將頭文件student.h放在用戶(hù)當(dāng)前目錄中,因此在文件名兩側(cè)用雙撇號(hào)包起來(lái)(″student.h″)而不用尖括號(hào)(<student.h>),否則編譯時(shí)會(huì)找不到此文件。

使用C++編譯系統(tǒng)對(duì)兩個(gè)源文件main.cpp和student.cpp分別進(jìn)行編譯,得到兩個(gè)目標(biāo)程序main.obj和student.obj,然后將它們和其他系統(tǒng)資海連接起來(lái),形成可執(zhí)行文件main.exe,見(jiàn)圖 。

注意,目標(biāo)文件的后綴在不同的C++編譯系統(tǒng)中是不同的,例如在GCC中,后綴是 .o,這里使用 .obj 是對(duì)VC 6.0而言。

在運(yùn)行程序時(shí)調(diào)用stud中的display函數(shù),輸出各數(shù)據(jù)成員的值。

有的讀者可能會(huì)考慮這樣一個(gè)問(wèn)題:如果一個(gè)類(lèi)聲明多次被不同的程序所調(diào)用,每次都要對(duì)包含成員函數(shù)定義的源文件(如上面的student.cpp進(jìn)行編譯,這是否可以改進(jìn)呢?的確,可以不必每次都對(duì)它重復(fù)進(jìn)行編譯,而只需編譯一次即可。把第一次編譯后所形成的目標(biāo)文件保存起來(lái),以后在需要時(shí)把它調(diào)出來(lái)直接與程序的目標(biāo)文件相連接即可。 這和使用函數(shù)庫(kù)中的函數(shù)是類(lèi)似的。

這也是把成員函數(shù)的定義不放在頭文件中的一個(gè)好處。如果對(duì)成員函數(shù)的定義也放在類(lèi)聲明的頭文件中,那么在對(duì)使用這些類(lèi)的每一個(gè)程序的每一次編譯時(shí)都必然包括對(duì)成員函數(shù)定義的編譯,即同一個(gè)成員函數(shù)的定義會(huì)多次被重復(fù)編譯。只有把對(duì)成員函數(shù)的定義單獨(dú)放在另一文件中,才能做到單獨(dú)編譯。

在實(shí)際工作中,并不是將一個(gè)類(lèi)聲明做成一個(gè)頭文件,而是將若干個(gè)常用的功能相近的類(lèi)聲明集中在一起,形成類(lèi)庫(kù)。

類(lèi)庫(kù)有兩種:一種是C++編譯系統(tǒng)提供的標(biāo)準(zhǔn)類(lèi)庫(kù);—種是用戶(hù)根據(jù)自已的需要做成的用戶(hù)類(lèi)庫(kù),提供給自己和自己授權(quán)的人使用,這稱(chēng)為自 定義類(lèi)庫(kù)。在程序開(kāi)發(fā)工作中,類(lèi)庫(kù)是很有用的,它可以減少用戶(hù)自己對(duì)類(lèi)和成員函數(shù)進(jìn)行定義的工作量。

類(lèi)庫(kù)包括兩個(gè)組成部分:類(lèi)聲明頭文件;已經(jīng)過(guò)編譯的成員函數(shù)的定義,它是目標(biāo)文件。

用戶(hù)只需把類(lèi)庫(kù)裝入到自己的計(jì)算機(jī)系統(tǒng)中(一般裝到C++編譯系統(tǒng)所在的子目錄下),并在程序中用#include命令行將有關(guān)的類(lèi)聲明的頭文件包含到程序中,就可以使用這些類(lèi)和其中的成員函數(shù),順利地運(yùn)行程序。這和在程序中使用C++系統(tǒng)提供的標(biāo)準(zhǔn)函數(shù)的方法是一樣的,例如用戶(hù)在調(diào)用sin函數(shù)時(shí)只需將包含聲明此函數(shù)的頭文件包含到程序中,即可調(diào)用該庫(kù)函數(shù),而不必了解sin函數(shù)是怎么實(shí)現(xiàn)的(函數(shù)值是怎樣計(jì)算出來(lái)的)。

當(dāng)然,前提是系統(tǒng)已裝了標(biāo)準(zhǔn)函數(shù)庫(kù)。在用戶(hù)源文件經(jīng)過(guò)編譯后,與系統(tǒng)庫(kù)(是目標(biāo)文件)相連接。

在用戶(hù)程序中包含類(lèi)聲明頭文件,類(lèi)聲明頭文件就成為用戶(hù)使用類(lèi)的公用接口,在頭文件的類(lèi)體中還提供了成員函數(shù)的函數(shù)原型聲明,用戶(hù)只有通過(guò)頭文件才能使用有關(guān)的類(lèi)。用戶(hù)看得見(jiàn)和接觸到的是這個(gè)頭文件,任何要使用這個(gè)類(lèi)的用戶(hù)只需包含這個(gè)頭文件即可。包含成員函數(shù)定義的文件就是類(lèi)的實(shí)現(xiàn)。

請(qǐng)?zhí)貏e注意,類(lèi)聲明和函數(shù)定義一般是分別放在兩個(gè)文本中的。由于要求接口與實(shí)現(xiàn)分離,為軟件開(kāi)發(fā)商向用戶(hù)提供類(lèi)庫(kù)創(chuàng)造了很好的條件。

開(kāi)發(fā)商把用戶(hù)所需的各種類(lèi)的聲明按類(lèi)放在不同的頭文件中,同時(shí)對(duì)包含成員函數(shù)定義的源文件進(jìn)行編譯,得到成員函數(shù)定義的目標(biāo)代碼。軟件商向用戶(hù)提供這些頭文件和類(lèi)的實(shí)現(xiàn)的目標(biāo)代碼(不提供函數(shù)定義的源代碼)。用戶(hù)在使用類(lèi)庫(kù)中的類(lèi)時(shí),只需將有關(guān)頭文件包含到自己的程序中,并且在編譯后連接成員函數(shù)定義的目標(biāo)代碼即可。

由于類(lèi)庫(kù)的出現(xiàn),用戶(hù)可以像使用零件一樣方便地使用在實(shí)踐中積累的通用的或?qū)S玫念?lèi),這就大大減少了程序設(shè)計(jì)的工作量,有效地提高了工作效率。

相關(guān)文章

  • C語(yǔ)言仿QQ聊天界面抖動(dòng)功能

    C語(yǔ)言仿QQ聊天界面抖動(dòng)功能

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言仿QQ聊天界面抖動(dòng)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • 使用C++實(shí)現(xiàn)迷宮游戲

    使用C++實(shí)現(xiàn)迷宮游戲

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)迷宮游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C++ RTTI與4種類(lèi)型轉(zhuǎn)換的深入理解

    C++ RTTI與4種類(lèi)型轉(zhuǎn)換的深入理解

    這篇文章主要給大家介紹了關(guān)于C++ RTTI與4種類(lèi)型轉(zhuǎn)換的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • C語(yǔ)言中static的使用方法實(shí)例詳解

    C語(yǔ)言中static的使用方法實(shí)例詳解

    static一般用于修飾局部變量,全局變量,函數(shù),下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中static用法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • C++實(shí)現(xiàn)萬(wàn)年歷功能

    C++實(shí)現(xiàn)萬(wàn)年歷功能

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)萬(wàn)年歷功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • C++日歷拼圖的解法你了解嗎

    C++日歷拼圖的解法你了解嗎

    這篇文章主要為大家詳細(xì)介紹了日歷拼圖C++的解法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • c++中數(shù)字與字符串之間的轉(zhuǎn)換方法(推薦)

    c++中數(shù)字與字符串之間的轉(zhuǎn)換方法(推薦)

    下面小編就為大家?guī)?lái)一篇c++中數(shù)字與字符串之間的轉(zhuǎn)換方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-09-09
  • C語(yǔ)言實(shí)現(xiàn)掃雷OvO(完整代碼)

    C語(yǔ)言實(shí)現(xiàn)掃雷OvO(完整代碼)

    相信大家都玩過(guò)掃雷游戲,因?yàn)樗?jīng)典了,今天我們用C語(yǔ)言來(lái)模擬實(shí)現(xiàn)掃雷游戲,結(jié)合示例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2022-04-04
  • C++使用標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)事件和委托以及信號(hào)和槽機(jī)制

    C++使用標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)事件和委托以及信號(hào)和槽機(jī)制

    這篇文章主要為大家詳細(xì)介紹了C++如何使用標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)事件和委托以及信號(hào)和槽機(jī)制,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下
    2022-11-11
  • 使用C語(yǔ)言打印月歷

    使用C語(yǔ)言打印月歷

    這篇文章主要為大家詳細(xì)介紹了使用C語(yǔ)言打印月歷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06

最新評(píng)論