控制代碼類 (Thinking in c++__1)

來源:互聯網
上載者:User
需求:

1)安全技術安全的需要。即使核心實現封閉在庫中不可見,但是標頭檔中的變數定義仍然會曝露一些內部資訊;

2)節省編譯時間的需要。在開發設計初期,實現部分需要經常變動,連標頭檔中變數定義也需要經常變動,因此在重編譯的時候標頭檔也需要編譯,有時候導致編譯時間過長。

方案:

控制代碼類可解決上述問題:

//:HANDLE.H -- Handle Classes
#ifndef HANDLE_H_
#define HANDLE_H_

class handle {
  struct cheshire; // Class declaration only
  cheshire* smile;
public:
  handle( );
  void doit( );
     ~handle( ); 
};
#endif // HANDLE_H_

    這是所有客戶程式員都能看到的,其中struct cheshire是沒有完全指定的類型說明或類說明,將用來存放真正的變數。它告訴編譯器, cheshire是一個結構的名字,但沒有提供有關該結構的任何東西。這對產生一個指向結構的指標來說意見足夠了。

    在這種技術中,包含具體實現的結構主體被隱藏在實現檔案中。

//:HANDLE.CPP -- Handle implementation
#include "handle.h"

//Define handle's implementation
struct handle:cheshire {
  int i;
};

handle::handle() {
  smile=(cheshire*)malloc(sizeof(cheshire));
  smile->i=0;
}

void handle::doit() {
  //do something with i
}

handle::~handle() {
  free(smile);
}

   
   控制代碼類的使用就像任何類的使用一樣,包括標頭檔,建立對象,發送資訊。但是通過這樣的設計,即隱藏了變數的設計,也使得實現作變動時無需重編譯標頭檔。Bruce說雖然這並不是完美的資訊隱蔽,但畢竟是一大進步。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.