继承和命名空间

Umu*_*bak 6 c++ namespaces

我正在尝试我的第一个有用的面向对象程序,其中包含一些命名空间 我有一个基类B,它位于名称空间NS中.如果我尝试从这个基类继承以获得继承工作,我应该在类decleration中使用NS :: B,如下所示,这是真的吗?或者是否有更广泛接受的继承语法?

namespace NS
{
    class D: public NS::B{
    ...
    };
}
Run Code Online (Sandbox Code Playgroud)

最好的,Umut

Eli*_*sky 11

如果你Dnamespace NS,你没有资格NS::B,因为D并且B在同一名称空间.你可以使用class D : public B.


Jam*_*lis 8

当您在命名空间内时NS,通常不需要(1)限定命名空间中的函数,类或其他实体的名称NS.鉴于:

namespace NS {
    class B { };
}
Run Code Online (Sandbox Code Playgroud)

以下两个定义D是相同的:

namespace NS {
    class D : public NS::B { };
}
Run Code Online (Sandbox Code Playgroud)

和:

namespace NS {
    class D : public B { };
}
Run Code Online (Sandbox Code Playgroud)

(1)Argument-Dependent Lookup(ADL)可能会导致一些丑陋的问题,特别是在使用模板时,为了修复它们,您可能需要限定名称.