匿名块的继承如何工作

时间:2014-05-23 07:08:35

标签: c++ inheritance

我有一个A类,B和C类来自。 C类中存在一个现有的匿名命名空间方法,比如'callMePlease'。现在,我们的想法是将它拉出到父类。虽然将此方法标记为受保护的@基类A更有意义,但我想知道在A中的匿名块中是否有我们可以使用此方法,但是B和C可以使用它。

所以,这是我的问题。如果我在A中定义了一个名称空间[匿名]并在那里定义了这个方法'callMePlease',那我可以用B或C吗?

这是我尝试过的。在我的A.hxx中,如果我宣布&定义方法,我可以在C.cxx中使用它。但是,如果我在A.hxx中声明该方法并定义其主体A.cxx,当我尝试在C.cxx中使用它时,我收到链接错误

有人可以帮我理解这个吗?有没有办法做到这一点?。

谢谢, 帕文。

编辑:当前的类表示

class C public A                 

C.cxx                            
namespace
{
void callMePlease()
{
  std::cout<<"Thanks for calling!";
}
}

void methodSpecificToC()
{
  // Do some processing.
  callMePlease();
}

class B public A

B.cxx

void methodSpecificToB()
{
  // Need to call callMePlease here too.
}

1 个答案:

答案 0 :(得分:1)

匿名namespaces中的功能在整个翻译单元中可见。但是,它们在外部不可见。在您的情况下void callMePlease()将从C.cxx的定义及其下方(见下面的代码)中有效地显示/调用:

C.cxx

namespace
{
  void callMePlease()
  {
    std::cout<<"Thanks for calling!";
  }
};

void C::methodSpecificToC()
{
  // Do some processing.
  callMePlease(); // callable because is defined above me.
}