c 類的程式設計規範

2021-07-05 06:01:32 字數 3035 閱讀 5664

類是c++中必不可少的一部分,類是物件導向(oo)的基礎,是乙個非常強大的功能,也是c++中最容易被濫用的功能之一。

類是應物件導向而誕生的,而過度並且無腦的物件導向,使程式大幅度的包裝,無謂的抽象,以及本身對類的使用不規範,導致了大量無謂低效的**誕生,本章講解的就是博主對類的使用的一點理解。

1.明確類的意義

類,指的就是一群,乙個group,類是許多具有同乙個性的物體的整體抽象,桌子,椅子都是乙個類,家具類,電視電腦都是乙個類,電子物品類,乙個類是乙個群體,而不是乙個單獨的部件,乙個只能是指代單個物品的類已經不是類了,而是一種特化。

所以,如果對於我們最熟悉的電腦,我們想要設計乙個類去表現他,改怎麼做?

首先,合理的使用物件導向的思維是關鍵,物件導向是符合實際的程式設計,而在實際生活中電腦是什麼樣的?乙個電腦是由各種東西「組成」的,對,組成,而非繼承,cpu,

顯示卡,記憶體等一系列部件通過內部組裝成就了我們的電腦,然後這一切在我們腦子裡構成了最初的**,我們不構建任何類作為computer的基類,假若你選擇先構建一堆類,代表cpu,memory,然後將他們通過繼承生成乙個新類並將其命名為computer,或許最終能拿到乙個不錯的computer類,但是思想卻已經偏離現實了

class computer

;

2.尋找通性

可是這還不夠,電腦是乙個類,乙個滿足封裝性的類具有很多的private 成員,但依舊需要許多的public成員,而電腦是怎樣對映c++中的類的?乙個很好的例子就是滑鼠,鍵盤,顯示屏以及usb插口,電腦依靠這些介面與別的東西互動,這一典型關係映**物件導向程式設計封裝與介面的原則,我們可以這樣更改我們的程式,先建立大致互動的介面

class computer

;

然後我們繼續思考,怎樣構建我們的私有成員,也就是我們電腦外殼下面的各式部件,或許急於程式設計的新手會這麼做,為每乙個部件構建乙個類,然後將他們放置與computer下,就像這樣子

class cpu

;class videocard

;class memory

;class computer

;

我們暫時不管建構函式的與其他東西的實現(事實上,乙個好的類庫,僅僅依靠介面以及一定的注釋就能讓使用者明白這個東西)但是,這違反了類的乙個原則,代表一類事物,類,是一類事物的抽象,對於具體的事物我們可以對其進行特化,但不應該直接將其定位一類,在這裡,不是一類了,而是乙個。所以,我們要對

cpu,memory等進行乙個抽象,他們在計算機中的共同之處是什麼?對,有乙個我們反覆強調的詞,部件,component,電腦由多個component所構成,cpu是乙個,memory是乙個,包括滑鼠,鍵盤也是乙個,所以我們構建乙個新的類,component,他將包含每個部件都應該有的一些東西,或者還有一些純虛函式

,更改我們的**到如下形態

class component

private:

std::string ctype;

virtual void dosomethingeverycomponentcando();

};

class computer

;

而在這之後,我們才可以進行類的特化,所謂類的特化,就是通過繼承的方式,把對某一大類的抽象的基類細化為針對某一明確型別的東西,如之前所說的,有些人可能以上來直接建立乙個針對某一物件的類,有時候,在一些比較特殊或比較簡單的時候,的確可以這樣做,但是,在乙個比較大而複雜的環境中,明確的繼承,基於抽象的細化會獲得更好的效果,也更易於理解和更改,基礎的方式也易於實現基於虛函式的多型實現,我們再次更改我們的**,通過繼承新建三個類,再一次更改我們的computer類

class component

private:

std::string ctype;

virtual void dosomethingeverycomponentcando();

};class cpu :public component

void dosomethingonlycpucando();

};class memory :public component

void dosomethingonlymemorycando();

};class videocard :public component

void dosomethingonlyvideocardcando();

};class computer

;

這就是乙個比較好的實現,繼承公有屬性並擁有特殊能力的部件通過組合得到了電腦,外加虛函式的使用可以讓這些部件適應給多的介面,還有一點,勁量將簡單的介面暴露給別的個體,這在具有多個類的時候實現松耦合非常重要,類與類之間,商定了通訊協議後絕對不能通過某種方法,使資料通過非公有函式,非正常渠道傳遞,否則的話後果就是函式的高度耦合,高度耦合會給兩邊類帶來災難性的後果,依舊是計算機這個例子,我們將其對映到真實世界中,用物件導向思維做一點對比。

人用計算機,這是雙邊關係,我們將其作為兩個類,人對計算機通訊依靠是滑鼠與鍵盤的事件,usb,計算機對人的通訊依靠顯示器,如果有一方失效了,另一方不會有任何損失,計算機的鍵盤失效了,我們依舊敲,然後從顯示屏上得到的資料判斷出有問題,我們不敲了,可以喝杯咖啡,人什麼問題都沒有,滑鼠也一樣;而人有問題了,亂敲鍵盤,計算機依舊正常響應他能響應的命令,這就是低耦合,一邊出問題對別的類影響並不大,而高耦合是什麼呢?

我們幻想乙個瘋狂的情形,我們把計算機的鍵盤給扯了,直接使用內部的電路對電腦操作,也就是說,我們通過了某種非常不可理喻的方法直接通過private成員操作了資料,然後我們應為某些原因間歇性的發瘋,拿起操起一把刀往電腦電路一頓砍,沒有了外殼的保護,內部電路被瘋狂的我們輕易的砍的一塌糊塗(這只是個比喻,現在的電腦能不能抗住刀砍還真沒試過),然後電腦炸了,電火花把人也給炸了,很瘋狂,不是麼,但是我相信很多人面對乙個由十幾個,幾十個高度耦合的類組成的專案時,真的會有那刀砍電腦的衝動,當然了,是這個專案作者的電腦

C 程式設計規範

關於組織和策略問題 0 不要拘泥於小節 了解哪些東西不應該標準化 類 函式和列舉 likethis 變數名 likethis 私有成員變數名 likethis 巨集名稱 like this。1 在高警告級別乾淨利落地進行編譯 2 使用自動構建系統 3 使用版本控制系統 最廉價也最流行的版本控制系統是...

C 程式設計規範

c coding standards 101 rules,guidelines,and best practices 組織及策略上的問題 organizational and policy issues 0.不拘小節 或 了解什麼不需要被規範化 1.在高警告級別下乾淨地編譯。2.使用自動化的構建 b...

c程式設計規範

c c 程式設計規範 1 檔案結構 每個c c 程式通常分為兩個檔案。乙個檔案用於儲存程式的宣告 declaration 稱為標頭檔案。另乙個檔案用於儲存程式的實現 implementation 稱為定義 definition c c 程式的標頭檔案以 h 為字尾,c 程式的定義檔案以 c 為字尾,...