2016-07-18 2 views
-1

У меня есть пространство имен с классом внутри. Как показано ниже;Пространство имен и наследование

class testClass { 

public: 
    testClass() { std::cout << "neat" << std::endl; }; 
    ~testClass() { }; 
    void print() { 
     std::cout << "printOne" << std::endl; 
    } 

}; 

namespace test { 
    class testClass; 

    class testClassTwo { 
    public: 
     void printTwo() { 
      std::cout << "printTwo" << std::endl; 
     } 
    }; 
} 

Я знаю, что я могу наследовать от TestClass, используя обычный способ

class testClassTwo : public testClass 

Но я видел что-то вдоль линии что в пространстве имен

class testClass; 

I не смогли найти убедительного объяснения того, что это на самом деле делает, я предполагаю наследовать что-то из класса testClass.

Я понимаю простой материал об пространствах имен, таких как;

test::testClassTwo classobj; 
classobj.printTwo(); 

Я также могу скомпилировать; test :: testClass;

, но на самом деле ничего не может с этим поделать.

Может ли кто-нибудь передать мне некоторые материалы для чтения или краткое объяснение того, что происходит на самом деле, когда я это делаю?

ответ

1

Я не смог найти подробное объяснение того, что это на самом деле делает, я предполагаю наследовать что-то из класса testClass.

Это неправильное предположение. class testClass - форвардная декларацияtestClass тип данных. Он позволяет вам указывать указатели и ссылки на объекты testClass без импорта соответствующего заголовка.

Дополнительную информацию о передовых декларациях можно найти в этом Q&A.

+0

Спасибо за ответ. – Dannys19

0

Это зависит от контекста. Где он находится в коде?

В коде, который вы вставили, он объявляет (сообщает компилятору), что класс testClass существует в пространстве имен test. (Read more: forward declaration)

Он должен скомпилировать все, но ссылка будет выдавать неопределенную ошибку rederence. Нет определения для test::testClass.

+0

Это всего лишь простой код, который я использую для проверки, но, похоже, я искал декларацию. – Dannys19

0
class testClass; 

Это не более, чем forward declaration. Обычно используется для предотвращения круговых зависимостей.

+0

Спасибо за ответ, я посмотрю в прямом заявлении. – Dannys19