我試圖設計一個庫,只打開幾個接口來調用,而不會弄亂它自己的內部訪問控制。什麼是正確的方法來做到這一點?如何正確設計圖書館的外部訪問而不搞亂內部訪問?
例如,這裏是圖書館:
namespace ControlledLib {
class ThinkTrack1 {
friend class DeepThought;
friend class ThinkTrack2;
private:
int ResultA() { return 6; }
int ResultB() { return 5; }
};
class ThinkTrack2 {
friend class DeepThought;
private:
int ResultC() { ThinkTrack1 tt1; return tt1.ResultB() + 2; }
};
class DeepThought {
friend int DeepThoughtAnswers();
private:
int Answers() {
ThinkTrack1 tt1;
ThinkTrack2 tt2;
return tt1.ResultA() * tt2.ResultC();
}
int CreateWorld() {
return 7;
}
};
int DeepThoughtAnswers() { DeepThought dt; return dt.Answers(); }
}
,它可以通過
#include "ControlledLib.h"
int i = ControlledLib::DeepThoughtAnswers();
被稱爲實際的答案被class DeepThought
的功能Answers()
給出,但是,僅做一個Answers()
訪問外部來電者,我必須使class DeepThought
的功能私人,併發明一個全球功能DeepThoughtAnswers()
作爲條目p oint,其中調用class DeepThought
得到答案,則class DeepThought
必須將DeepThoughtAnswers()
定義爲的朋友函數。
它剛剛開始。作爲class DeepThought
實際上調用class ThinkTrack1
和class ThinkTrack2
,並且class ThinkTrack2
電話class ThinkTrack1
等等......要把這些不可訪問外部調用程序,所有這些功能都設置爲私人,我必須定義很多朋友船。最重要的是,所有這些搞砸了內部訪問控制!
什麼是更好的方法來做到這一點?
作者:「將實現隱藏爲一個庫並僅將接口作爲頭文件分發」,是否意味着我可以將它分解爲'ControlledLib.h'和'ControlledLib.cpp',並且只有暴露的東西在ControlledLib.h頭文件中可以訪問調用者? – athos