说我有一个抽象类只有在引用基类时才能调用的方法? 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