C++ 关于继承的问题

C++ 关于继承的问题,c++,C++,我可以在类W的范围内调用D基类中的私有成员函数吗?否。除了拥有私有成员函数的类之外,您永远不能从任何地方调用它。如果您希望派生类能够访问它,请将其声明为受保护 你也可以声明D是B类的“朋友”;这将允许D访问B.DoSomething()。但是,这种方法通常是不受欢迎的。函数DoSomething只有在声明为public或private时才能在类外访问。除此之外,正如Aric所提到的,继承类可以成为朋友来实现同样的目标 另一种方法是将函数声明/定义为virtual,而不为子类/继承类定义virtu

我可以在类W的范围内调用D基类中的私有成员函数吗?

否。除了拥有私有成员函数的类之外,您永远不能从任何地方调用它。如果您希望派生类能够访问它,请将其声明为受保护


你也可以声明D是B类的“朋友”;这将允许D访问B.DoSomething()。但是,这种方法通常是不受欢迎的。

函数DoSomething只有在声明为public或private时才能在类外访问。除此之外,正如Aric所提到的,继承类可以成为朋友来实现同样的目标


另一种方法是将函数声明/定义为virtual,而不为子类/继承类定义virtual定义。执行此操作时,将调用基类的函数定义。

否,如果使用受保护的关键字,则可以。它是嵌套类这一事实与此无关。

?如果DoSomething()是公共的,为什么不编译并尝试呢。似乎我不能在W的范围内调用它,对吗?如果你将它声明为public,你可以从B的实例或任何扩展B的类的实例访问它。但它必须从类的实例:B=new B();b、 DoSomething()。你不能直接从W访问它。在[我的答案]的第一行中有一个小的更正,我提到它是“公开的或私人的”。它应该是“public or protected”@Roopesh您可以编辑答案来更正它,而不是留下评论。正如您所知,StackOverflow提供了该选项。
class B{
private:
   void DoSomething();
}

class W{
private: 
   class D: public B{
   }

   D d; 
}