偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

詳細說明C++編譯的編寫及其代碼問題

開發(fā) 后端
你要對C++編譯的程序設計得非常糟糕,以至于編譯器不得不檢查數(shù)以百計的頭文件和數(shù)萬行代碼。理論上來說,這是可以避免的。

為每一個軟件行業(yè)的從業(yè)人員,無論是開發(fā)人員、項目經(jīng)理、還是測試人員,也要不斷適應這個趨勢,我認為C++編譯只會使我們的工作更簡單和更輕松,希望本文能教會你更多東西。

如果這是你購買的庫的設計問題,你對它無計可施(除了換一個更好的庫),但你可以將你自己的代碼組織得更好一些,以求得將修改代碼后的重新編譯工作降到最少。這樣的設計會更好,更有可維護性,因為它們展示了更好的概念上的分離。

看看這個典型的面向?qū)ο蟮?FONT>C++編譯程序例子:

  1. class Shape {  
  2.  
  3.     public:     // 使用Shapes的用戶的接口  
  4.  
  5.         virtual void draw() const;  
  6.  
  7.         virtual void rotate(int degrees);  
  8.  
  9.         // ...  
  10.  
  11.     protected:  // common data (for implementers of Shapes)  
  12.  
  13.         Point center;  
  14.  
  15.         Color col;  
  16.  
  17.         // ...  
  18.  
  19.     };  
  20.  
  21.    
  22.  
  23.     class Circle : public Shape {  
  24.  
  25.     public:   
  26.  
  27.         void draw() const;  
  28.  
  29.         void rotate(int) { }  
  30.  
  31.         // ...  
  32.  
  33.     protected:  
  34.  
  35.         int radius;  
  36.  
  37.         // ...  
  38.  
  39.     };  
  40.  
  41.    
  42.  
  43.     class Triangle : public Shape {  
  44.  
  45.     public:   
  46.  
  47.         void draw() const;  
  48.  
  49.         void rotate(int);  
  50.  
  51.         // ...  
  52.  
  53.     protected:  
  54.  
  55.         Point a, b, c;  
  56.  
  57.         // ...  
  58.  
  59.     };   

設計思想是,用戶通過Shape的public接口來操縱它們,而派生類(例如Circle和Triangle)的實現(xiàn)部分則共享由protected成員表現(xiàn)的那部分實現(xiàn)(implementation)。這不是一件容易的事情:確定哪些實現(xiàn)部分是對所有的派生類都有用的,并將之共享出來。

因此,與public接口相比,protected成員往往要做多得多的改動。舉例來說,雖然理論上“中心”(center)對所有的圖形都是一個有效的概念,但當你要維護一個三角形的“中心”的時候,是一件非常麻煩的事情——對于三角形,當且僅當它確實被需要的時候,計算這個中心才是有意義的。#t#

protected成員很可能要依賴于實現(xiàn)部分的細節(jié),而Shape的用戶(譯注:user此處譯為用戶,指使用Shape類的C++編譯,下同)卻不見得必須依賴它們。舉例來說,很多(大多數(shù)?)使用Shape的代碼在邏輯上是與“顏色”無關的,但是由于Shape中“顏色”這個定義的存在,卻可能需要一堆復雜的頭文件,來結(jié)合操作系統(tǒng)的顏色概念。

當protected部分發(fā)生了改變時,使用Shape的代碼必須重新編譯——即使只有派生類的實現(xiàn)部分才能夠訪問protected成員。于是,基類中的“實現(xiàn)相關的信息”(information helpful to implementers)對用戶來說變成了象接口一樣敏感的東西,它的存在導致了實現(xiàn)部分的不穩(wěn)定,用戶代碼的無謂的重編譯(當實現(xiàn)部分發(fā)生改變時),以及將頭文件無節(jié)制地包含進用戶代碼中(因為“實現(xiàn)相關的信息”需要它們)。有時這被稱為“脆弱的基類問題”(brittle base class problem)。

一個很明顯的解決方案就是,忽略基類中那些象接口一樣被使用的“實現(xiàn)相關的信息”。換句話說,使用接口,純粹的接口。也就是說,用抽象基類的方式來表示接口:

  1. class Shape {  
  2.  
  3.     public:     //使用Shapes的用戶的接口  
  4.  
  5.         virtual void draw() const = 0;  
  6.  
  7.         virtual void rotate(int degrees) = 0;  
  8.  
  9.         virtual Point center() const = 0;  
  10.  
  11.         // ...  
  12.  
  13.    
  14.  
  15.         // 沒有數(shù)據(jù)  
  16.  
  17.     };  
  18.  
  19.    
  20.  
  21.     class Circle : public Shape {  
  22.  
  23.     public:   
  24.  
  25.         void draw() const;  
  26.  
  27.         void rotate(int) { }  
  28.  
  29.         Point center() const { return center; }  
  30.  
  31.         // ...  
  32.  
  33.     protected:  
  34.  
  35.         Point cent;  
  36.  
  37.         Color col;  
  38.  
  39.         int radius;  
  40.  
  41.         // ...  
  42.  
  43.     };  
  44.  
  45.    
  46.  
  47.     class Triangle : public Shape {  
  48.  
  49.     public:   
  50.  
  51.         void draw() const;  
  52.  
  53.         void rotate(int);  
  54.  
  55.         Point center() const;  
  56.  
  57.         // ...  
  58.  
  59.     protected:  
  60.  
  61.         Color col;  
  62.  
  63.         Point a, b, c;  
  64.  
  65.         // ...  
  66.  
  67.     };   

現(xiàn)在,用戶對C++編譯與派生類的實現(xiàn)部分的變化之間的關系被隔離了。我曾經(jīng)見過這種技術使得編譯的時間減少了幾個數(shù)量級。

責任編輯:chenqingxiang 來源: CSDN
相關推薦

2010-01-19 09:54:19

C++代碼

2010-01-13 13:27:00

C++優(yōu)化

2010-01-19 13:43:59

C++函數(shù)

2010-01-28 11:08:09

C++變量

2010-01-08 17:06:52

C++代碼

2010-01-18 10:34:21

C++編譯器

2010-01-08 16:10:59

C++語言

2009-12-07 13:12:18

WFC端口

2010-01-11 13:31:03

C++語言

2014-09-16 09:57:56

INotifyProp

2010-02-22 13:20:58

Python中文問題

2009-12-09 15:40:04

Visual Stud

2010-02-23 10:14:29

Python 源代碼

2010-01-11 11:27:25

C++語言

2010-02-24 10:07:28

Python虛擬機

2009-12-28 09:26:09

ADO對象

2010-10-13 14:28:09

mysql日志文件

2009-12-08 17:34:25

WCF的配置

2010-03-18 16:53:56

骨干交換機

2010-02-04 14:41:52

Android菜單類型
點贊
收藏

51CTO技術棧公眾號