說我有一個抽象類只有在引用基類時才能調用的方法? C++
class NecessaryDanger
{
public:
virtual void doSomethingDangerous() =0;
}
和一類是派生自此類:
class DoesOtherStuff : public NecessaryDanger
{
//stuff
void otherMethod();
void doSomethingDangerous();
}
是有一種方法可以只允許像
doSomethingDangerous()的訪問DoesOtherStuff d;
d = DoesOtherStuff();
d.otherMethod(); //OK
d.doSomethingDangerous(); //error
NecessaryDanger* n = &d;
n->doSomethingDangerous(); //OK
我還不是很擅長C++,所以上面的代碼可能不太對,但你也許會明白。我有一組類需要能夠做出「危險的事情」(以他們自己的特殊方式),如果這些類的不止一個對象做這個危險的事情,可能會引發問題。我想有一個只有一個對象的必需的指針的管理器類。如果方法doSomethingDangerous只能由必需的對象來調用,那麼意外的調用會更難以發生,並且會讓我頭痛不已。
在此先感謝您的幫助。對不起,如果這是一個愚蠢的問題!
你能解釋一下如何去和朋友一起做這件事嗎?我是否會像派生類一樣從基類派生:私有基礎,將危險方法設爲私有,並將基類聲明爲朋友? 爲什麼使基地私人防止鑄造? 謝謝 – Johnny 2010-08-26 06:07:54
更新了代碼示例。這幾乎和你所描述的一樣,但是讓經理級別成爲朋友:你希望它能夠完全訪問「私人」的東西。使基地保密是防止施放到基地的,因爲當某些東西是私人的時候,班級本身和其朋友之外沒有任何東西可以告訴它存在。 – Potatoswatter 2010-08-26 06:15:01
感謝您的編輯!但是,這不會允許我在DangerManager的任何地方爲任何對象調用此方法嗎?那麼如果我需要在DangerManager之外的某個地方稍後在其他環境中調用doSomethingDangerous呢? 我仍然會像從DoesOtherStuff d危險管理器中調用此= DoesOtherStuff(); d.doSomethingDangerous;對?有沒有一種方法我只能稱之爲必要的危險* n; N-> doSomethingDangerous()?感謝您的支持。 – Johnny 2010-08-26 06:19:24