c++ - 在匿名 block 的情况下继承如何工作

标签 c++ inheritance

我有一个类 A,类 B 和类 C 派生自该类。 C 类中存在一个匿名命名空间方法,例如“callMePlease”。现在,想法是将其拉出到父类。尽管将此方法标记为 Protected @ base class A 更有意义,但我想知道我们是否可以在 A 的匿名 block 中使用此方法,但仍可由 B 和 C 使用。

所以,这是我的问题。如果我在 A 中定义一个命名空间 [anonymous] 并在那里定义这个方法 '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.
}

最佳答案

匿名命名空间中的函数在整个翻译单元中可见。但是,它们在外部是不可见的。在您的情况下,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.
}

关于c++ - 在匿名 block 的情况下继承如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23823066/

相关文章:

C++:可以为一个 int 分配一个 char* 吗?

c++ - 在 C++ 中将有符号整数值转换为可排序、无符号的标准兼容方法是什么?

html - 我不希望我的子页面继承父主题的链接颜色(红色),我该怎么做?

oop - OOP : multiple, 中的抽象但相当不同的上下文?

c++ - 将依赖类型声明为模板类中的函数参数

c++ - 枚举所有 T 的所有 SomeClass<T> 对象

c++ - 从 Visual Studio 2005 升级到 Visual Studio 2008 的陷阱

c# - 运算符重载和继承 c#

scala - 继承

C# 调用当前类的带参数的基构造函数和无参数构造函数