無論是模組化設計,還是物件導向設計,還是分層設計,實現子系統內部資訊的對外隱藏都是最關鍵的內在要求。以本人淺顯的經驗,把資訊隱藏按照程度的不同分成(1)不可見不可用(2)可見不可用(3)可見可用。
就是說模組內部的變數、結構體、類定義對外部而已完全隱藏,外部對此一無所知。常用的實現方法就是利用不透明指標,請參見我的博文c語言開發函式庫時利用不透明指標對外隱藏結構體細節。
這種方法同樣適用於c++語言,一種可能的實現方式為面向介面程式設計。
標頭檔案 imyclass.h
class imyclass
;imyclass* createmyclassobject();
實現檔案 myclass.cpp
#include "imyclass.h"
class myclass : imyclass.h
;imyclass* createmyclassobject()
這種實現方法在原始碼層次和庫層次上都能適用。
理論上說,完全實現不可見是最完美的設計。然而這對於程式設計要求非常高,而且會帶來更多的**量和設計邏輯層次以及一些限制(如無法實現對已有型別的繼承)。
所以,很多c++庫的設計都採用了下面這種可見不可用的方式,如mfc。
這種方法指的是專門針對c++而言的,指的是c++類中的非公開型別成員。例如在標頭檔案 myclass.h中:
class myclass
;
對於呼叫方來說,包含次標頭檔案後,雖然能夠看到x,y,z等成員變數,但是卻無法使用它們。只要客戶端需要使用 new 來生成例項或者繼承類,就必須知道類的完整定義。
對c語言而言,不存在這種情況,因為結構體裡的任何變數都是公開的。
也就是毫無隱藏而言了,程式設計中絕對要避免。
c 中資訊隱藏的實現
雖然將資料和函式 在一起很有好處,並使得庫容易使用,因為這可以通過隱藏名字防止名字衝突,但是,還有大量的工作可以使c 程式設計更加安全。第3章 隱藏實現 1 需要控制對結構成員的訪問有兩個理由 一是讓使用者避開一些他們不需要使用的工具,這些工具對資料型別內部的處理來說是必須的,但對於使用者特定問題的...
C C 實現三子棋小程式
首先宣告標頭檔案 game.h ifndef game h define game h pragma once 預防標頭檔案重複引用 include include define row 3 define col 3 void initboard char board col int row,int...
C c 中的重寫方法與隱藏方
1 父類中有方法a,新增virtua修飾符可宣告為虛方法,在子類中可以用override宣告後重寫方法a。2 父類中有方法a,在子類中可以有new修飾符宣告後隱藏父類方法。子類重寫方法後,對於子類的任何例項,父類的原方法a都已經不存在。子類隱藏父類方法後,父類的原方法仍然存在,當子類的例項的型別轉為...