C++實戰之數據抽象

       C++是一個能提高效率的工具。這就是我們爲什麼在熟悉了以前的語言以後還要花如此多的時間和經歷來學習和使用它的原因。可能我們會在一段時間內是效率降低,但是當我們熟練地掌握了新工具以後,我們將會得到更好的效率。在C++裏,唯一能極大地提高工作效率的方法就是使用---庫。這也是C++設計的主要目標之一,對C++的數據定義和設計有一定地瞭解,你對使用庫也將會有更深入的認識。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

首先,你必須知道“聲明”和“定義”的區別。

無論是對於變量還是函數,“聲明”向計算機介紹名字的含義;而“定義”爲這個名字分配存儲空間。在聲明而不定義的時候則要使用extern關鍵字,函數的extern關鍵字是可選的。不帶函數體的函數就自動被編譯器認作是一個聲明瞭。(注:C++中函數必須在定義之前作聲明的,即要有函數原型,這樣做的主要目的是爲了讓編譯器能進行類型檢查。)下面是一些具體的示例:

//example for C++ Declaration and Definition

extern int a;  //變量聲明而沒有定義

extern int i(int)  //函數的聲明

 

int b;          //變量聲明又定義了

int i(int x)  //函數的定義

{

    return x+1;

}

 

void main(void)

{
        a = 1;

    i(a);

    }

C++對C的第一步改造就是從函數和變量的關係入手的。相信熟悉C語言的人都知道,在C中如果要將一組不同類型的變量組合在一起使用就會用到struct關鍵字。與其想配合的還有一組函數供其調用,以實現該struct的不同功能。但是有一點,那就是所有這些函數對於該struct以外的變量也都是可見的,一樣可以調用這個函數。這樣是很不安全的,對於程序設計的模塊化也沒有什麼好處。

C++的第一步就是將函數放到struct裏面,作爲“成員函數”。這樣就帶來了新的問題:各個struct中的函數可以重名,在定義這個函數時,需要完全指定它是哪一個。爲了完成這個指定任務, C + +有一個新的運算符: :,即範圍分解運算符(用來指定該函數的執行範圍,即是哪個struct中的)。

C++中,將函數放進結構中是對C的一種根本改變,並且讓我們將結構當作新的概念來思考。C 中,結構是數據的凝聚,它將數據捆綁在一起,使得我們可以將它們看作一個包。但這除了能使程序設計方便之外,別無其他好處。這些結構上的運算可以用在別處。然而將函數也放在這個包內,結構就變成了新的創造物,它既能描述屬性(就像C中的struct 能做的一樣),又能描述行爲,這就形成了對象的概念。對象是一個獨立的有約束的實體,有自己的記憶和活動。在C++ 中,對象只是一個變量,最純的定義是“存儲的一個區域”。它是能存放數據的空間,並隱含着還有在這些數據上的運算。將數據連同函數捆綁在一起,這一點就允許創建新的類型。這常常被稱爲封裝。

然而,我們會看到在對象上完成運算的方法有所不同。

object.member_function(arglist)是對一個對象“調用一個成員函數”。而在面向對象的用法中,也稱之爲“向一個對象發送消息”。這樣,對於stash S,語句S.add(&i)“發送消息給S”,也就是說,“對自己add( )”。事實上,面向對象程序設計可以總結爲一句話,“向對象發送消息”。需要做的所有事情就是創建一束對象並且給它們發送消息。當然,問題是勾畫出我們的對象和消息是什麼,但如果完成了這些,C++ 的實現就直截了當了。

一個結構的大小是它的所有成員大小的和。有時,當一個struct 被編譯器處理時,會增加額外的字節以使得捆綁更整齊,這主要是爲了提高執行效率。

sizeof可以計算出 struct的內存大小。

//size of struct

#include <stdio.h>

 

struct A

{

    int i[100];

    };

 

    struct B

{

        void x();

    };

 

void main(void)

{

    printf(“size of struct A is %d/n”, sizeof(A);

    printf(“size of struct B is %d/n”, sizeof(B);

    }

第一句printf會打印出200,而第二句則會打印出一個不確定的非零值。這個在C中不合法,但是在C++中是合法的。

在這篇文章中,我介紹了使用C++ 的基本方法,也就是在結構的內部放入函數。這種新類型被稱爲抽象數據類型,用這種結構創建的變量被稱爲這個類型的對象或實例。向對象調用成員函數被稱爲向這個對象發消息。面向對象的程序設計中的主要活動就是向對象發消息。雖然將數據和函數捆綁在一起很有好處,並使得庫更容易使用,因爲這可以通過隱藏名字防止名字衝突,但是,還有大量的工作可以使C + +程序設計

 

 

作者小作,希望有什麼意見請MAIL我:[email protected]

發佈了33 篇原創文章 · 獲贊 0 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章