c的特點是什麼?c的特點是什麼?談談它的多型性

2021-03-07 06:58:41 字數 4708 閱讀 6547

1樓:匿名使用者

c++是以c語言為基礎,支援資料抽象和麵向物件的程式設計語言。c++對c語言的擴充部分汲取了

許多著名語言中最優秀的特徵,如從algo168中吸取了操作符過載機制等。由於c++語言具有與c語言一

樣的高執行效率,並容易被熟悉c語言的軟體人員接受,因而很快得以流行。但這種混合型物件導向的

程式設計語言是一種新的程式設計語言,人們對它許多潛在的效能(封裝、繼承、多型等)還沒有充分

地理解和應用,沒有充分發揮其優勢。多型性是物件導向系統的重要概念之一,它指的是同樣的訊息

能被髮送到父類的物件和它的子類的物件。本文重點討論多型性在程式設計中的應用。

1 多型性的實現形式

從廣義上說,多型性是指一段程式能夠處理多種型別物件的能力。在c++語言中,這種多型性可以

通過強制多型、過載多型、型別引數化多型、包含多型4種形式來實現。型別引數化多型和包含多型統

稱為一般多型性,用來系統地刻畫語義上相關的一組型別。過載多型和強制多型統稱為特殊多型性,

用來刻畫語義上無關聯的型別間的關係。

包含多型是指通過子型別化,1個程式段既能處理型別t的物件,也能夠處理型別t的子型別s的對

象,該程式段稱為多型程式段。公有繼承能夠實現子型別。在包含多型中,1個物件可以被看作屬於不

同的類,其間包含關係的存在意味著公共結構的存在。包含多型在不少語言中存在,如整數型別中的

子集構成1個子型別。每一個子型別中的物件可以被用在高一級的型別中,高一級型別中的所有操作可

用於下一級的物件。在c++中公有繼承關係是一種包含多型,每一個類可以直接公有繼承父類或多個父

類,如語句class d

2樓:匿名使用者

c++語言是對c語言的擴充套件,是c語言的超集。c語言是 美國貝爾實驗室 在1969~2023年開發的,與此同時,還用它開發了unix作業系統。c語言又是由b語言衍生而來的,b語言是貝爾實驗室的 ken thompson 在bcpl語言的基礎上開發的,並用它編寫了第一個unix作業系統。

bcpl語言是 英國劍橋大學 的 martin richards ,60年代在美國mit時設計的。

2023年,貝爾實驗室的 dennis ritchie 擴充套件了b語言(通過增加型別),他稱之為nb,即new b。在更改了b語言的結構,並重寫了b語言的編譯器後,ritchie稱他的新語言為c。2023年,出現了許多c語言的版本, 美國國家標準化協會(ansi) 在2023年出版了標準的c語言,稱之為ansi c。

也是在2023年,貝爾實驗室的 bjarne stroustrup 在c語言的基礎上,建立了c++語言,它是為unix系統環境設計的。c++語言增強了c語言的能力,使得程式設計師能夠改進編寫程式的質量,並易於程式**的複用。c++語言的iso標準已在2023年11月被一致通過,2023年8月被正式批准。

c++語言在2023年開始被使用,"c++"這個名字是由rick maseitti提出,到2023年夏確定的。c++的創作靈感**於當時計算機語言多方面的成果,特別是bcpl語言(basic ***bined programming language, 它也是c語言的**之一)和simula 67語言(以物件導向為核心的語言),同時還借鑑了algol 68。就如同它的名字表達的那樣,c++語言是c語言的一個超集,它是一門混合型的語言,既支援傳統的結構化程式設計,又支援物件導向的程式設計,這是c++語言成功流行的一個重要原因。

讀者可能產生疑問,既然物件導向的程式設計方法比結構化的程式設計方法先進許多,為什麼c++語言仍舊支援後者,而不願意成為一門純粹的物件導向的程式設計語言?

實際上,這種做法也是從程式設計語言發展實踐中得到的經驗。物件導向程式設計的概念提出後,某些公司和機構曾經開發出一些純物件導向的語言,比如第一個成功的、純物件導向的程式設計語言的**alltalk,但是由於廣大的程式設計師不能一下子完全接受物件導向程式設計的思想,不能完全適應物件導向程式設計的技術,這些語言都沒有能夠廣泛的流行起來。事實上,程式設計師們長期採用結構化的程式設計方法,並從中汲取了許多寶貴經驗,形成了巨大的財富,這些財富應該得到繼承和發展;而且結構化程式設計方法在小型軟體專案的開發設計上仍然很適用,完全否定這種設計方法也是不恰當的。

c++作為一門混合型語言,在增加對於物件導向方法的支援的同時,還繼承了傳統程式設計語言c的優點,克服了其不足之處,使得自身既適用於結構化程式設計,又能滿足物件導向程式設計的要求,這就符合廣大程式設計師逐步更新其程式設計觀念和方法的要求,因而很快流行起來。總之,對於傳統的財富不是完全拋棄,而是繼承並發展之,是c++語言成功的重要原因。

c++從c語言發展而來,比c更好, 其優點主要包括:

(1) 與c語言相容,既支援物件導向的程式設計,也支援結構化的程式設計。同時,熟悉c語言的程式設計師,能夠迅速掌握c++語言。

(2) 修補了c語言中的一些漏洞,提供更好的型別檢查和編譯時的分析。使得程式設計師在c++環境下繼續寫c**,也能得到直接的好處。

(3) 生成目標程式質量高,程式執行效率高。一般來說,用物件導向的c++編寫的程式執行速度與c語言程式不相上下。

(4) 提供了異常處理機制,簡化了程式的出錯處理。利用throw、try和catch關鍵字,出錯處理程式不必與正常的**緊密結合,提高了程式的可靠性和可讀性。

(5) 函式可以過載及可以使用預設引數。過載允許相同的函式名具有不同參數列,系統根據引數的個數和型別匹配相應的函式。預設引數可以使得程式設計師能夠以不同的方法呼叫同一個函式,並自動對某些預設引數提供預設值。

(6) 提供了模板機制。摸板包括類摸板和函式模板兩種,它們將資料型別作為引數。對於具體資料型別,編譯器自動生成模板類或模板函式,它提供了源**複用的一種手段。

c++語言對c語言擴充和增強的幾點具體體現

c++在增加物件導向的特徵之外,還對c語言進行了擴充和增強。主要的增強點有如下幾個:

1. 註釋

在c語言塊註釋的形式

/* explanation sentence

*/ 的基礎上,c++語言提供了一種新的單行註釋形式:

//explanation sentence

即用"//"表示註釋開始,從該位置直到當前行結束的所有字元都被作為註釋。

舉個簡單的例子:

例1-4:

/* 下面的程式段計算從1到100的整數和,

結果記錄在變數sum中

*/ sum = 0; //變數sum初值置為零

for(i = 1; i <= 100; i++)

2. 更加靈活的變數說明

在傳統的c語言中,區域性變數的說明必須集中放在執行**的前面,資料說明語句和執行語句的混合將引起編譯錯誤。而在c++中,可以在程式**塊的任何地方進行區域性變數的說明。比如下面的**在c語言中是不正確的,在c++語言中卻可以正常執行。

for(int i = 1; i < = 100; i++);

這樣做的好處是使變數的定義和它的使用集中在一起,意義一目瞭然。

3. 更加嚴格的函式原型說明

c++摒棄了c語言對函式原型隨意簡化的方式,這種簡化是許多c語言程式錯誤的根源。c++語言要求程式設計者為函式提供完整的原型,包括全部引數的型別和返回值得說明。

例如,有字元型和雙精度型別兩個引數、返回整型值的函式f,原型應該寫為:

int f(char, double);

而c語言中允許將這個原型寫成"f( );"。

在函式原型說明中,引數名可有可無,並且可以和函式定義中的引數名不一致。

4. 增加了函式過載機制

過載是程式語言領域的重要概念。常規語言中最典型的例子是"+、-、×、/"等各種算術運算子的過載,這些符號可以同時用來表示多種型別資料之間的運算,這種對一個名字或一個符號賦予多重意義的情況就叫過載。

c++語言增加了c語言所沒有的函式過載機制。對一個函式名可以給出多個函式定義,只要這些定義可以通過引數個數或型別的不同區別開來即可。

c++還允許對系統中預先定義的運算子號進行過載,增加新的定義。這樣做的優點是在今後對新定義型別的變數進行運算時,計算公式寫起來方便自然。

5. 函式預設引數

c++中允許函式有預設引數。所謂預設,是指函式呼叫時可以不給出實際的引數值。下面是一個有預設引數的函式定義的例項:

例1-5:

int f(int a, int b=1)

此後,函式呼叫f(3,1)和f(3)將返回同樣的結果。

6. 更加方便的動態儲存分配

c++為了提高記憶體管理上的靈活性,提供了動態記憶體分配合釋放的操作符new和delete,用來增強c語言中原有的函式malloc()和free();

7. 增加了行內函數(inline function)

c++提供了行內函數,用以代替c語言中的巨集。巨集的處理機構是前處理器而不是編譯器,它雖然可以提高效率,但是卻不能實現函式呼叫所擁有的引數型別檢查等機制。行內函數不但能夠象巨集那樣節約函式呼叫時儲存現場所需的系統開銷,提高程式執行效率,還保留了函式進行引數型別檢查的機制;並且c++語言中的巨集是不能夠存取物件私有成員變數的,但是使用行內函數,則沒有這一限制。

8. 輸入/輸出流機制

c++保留了c語言標準庫中各種輸入/輸出函式,而且提供了一套新的輸入/輸出機制――流機制。

比如向標準輸出輸出一個字串:

cout<<"c++ is beautiful!";

或者由標準輸入讀一個整數,賦給變數a

int a;

cin>>a;

流式輸入/輸出運算子能夠根據變數型別自動確定資料交換過程中的轉換方式,還可以定義"<<、>>"的過載,方便了程式設計者自定義型別的資料的輸入/輸出。

9. 作用域限定運算子::

作用域限定運算子::用於對當前作用域之外的同名變數進行訪問。例如在下面的例子中,我們可以利用::實現在區域性變數a的作用域範圍內對全域性變數a的訪問。

erp的特點是什麼,ERP的特點是什麼?

特點erp把客戶需求和企業內部的製造活動以及 商的製造資源整合在一起,形成企業一個完整的 鏈,其核心管理思想主要體現在以下三個方面 一 體現對整個 鏈資源進行管理的思想 二 體現精益生產 敏捷製造和同步工程的思想 三 體現事先計劃與事前控制的思想。erp應用成功的標誌是 一 系統執行整合化,軟體的運...

香港的經濟特點是什麼,香港的特點是什麼

一 香港經濟特點 香港是世界上重要的金融 交通 旅遊 資訊和通訊中心。香港現代經濟發展基礎是製造業。香港是重要的國際 中心.香港是僅次於紐約 倫敦的世界第三大國際金融中心。香港是亞太地區的交通 旅遊中心之一.特點是由優勢演變而來的.二 香港是長期擁有自己特色的資本主義社會優勢 1 香港基本法為在一國...

荷花的特點是什麼,荷花的荷花的特點是什麼?

荷花的特點 荷花屬於睡蓮科,為多年生宿根草本植物。根莖在水底泥中橫向匍匐生長,即日常食用的 蓮藕 實為根狀莖 藕下生須狀根,方為真正的根,用以吸收土壤中的養分。葉大而圓呈盾形,直徑可達40釐米以上,葉背 有一柄,柄上長刺毛,細長的葉柄高出水面並負荷一面大葉子,荷 的名稱或由此生。花被無花冠和花萼之分...