наследование и пространства имен - PullRequest
6 голосов
/ 01 декабря 2010

Я пытаюсь создать свою первую полезную объектно-ориентированную программу с использованием некоторого пространства имен.У меня есть базовый класс B, который находится в пространстве имен NS.Если я пытаюсь наследовать от этого базового класса, чтобы получить работу наследования, я должен использовать NS :: B в объявлении класса, как показано ниже, действительно ли это так?Или для этого синтаксиса наследования существует более распространенный стиль?

namespace NS
{
    class D: public NS::B{
    ...
    };
}

Best, Umut

Ответы [ 3 ]

10 голосов
/ 01 декабря 2010

Если ваш D находится в namespace NS, вам не нужно указывать NS::B, поскольку D и B находятся в одном и том же пространстве имен.Вы можете просто использовать class D : public B.

8 голосов
/ 01 декабря 2010

Когда вы находитесь внутри пространства имен NS, вам обычно (1) не требуется указывать имена функций, классов или других объектов, которые находятся в пространстве имен NS.Дано:

namespace NS {
    class B { };
}

следующие два определения D одинаковы:

namespace NS {
    class D : public NS::B { };
}

и:

namespace NS {
    class D : public B { };
}

(1) Аргумент-Зависимый поиск (ADL) может вызвать некоторые ужасные проблемы , особенно при использовании шаблонов, и для их устранения вам может потребоваться указать имена.

1 голос
/ 01 декабря 2010

Вам не нужно обозначать NS, так как вы уже внутри него

namespace NS
{
    class D: public B{ //is fine
    };
}

Еще кое-что, что вы можете найти интересным позже:

#include <iostream>
int x = 10;

int main()
{
    int x = 5;
    //This will show the local x
    std::cout << x << std::endl;
    //This is how you access the Global x
    std::cout << ::x << std::endl;

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...