С++ для начинающих




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


// ---- primer.C ----

#include "primer.h"

cplusplus_primer::MatrixLib::matrix

    cplusplus_primer::MatrixLib::operator+

        ( const matrix &ml, const matrix &m2 )

    {

        // объявление локальной переменной типа

        // cplusplus_primer::MatrixLib::matrix

        matrix res;

        // вычислим сумму двух объектов matrix

        return res;

    }

Хотя члены могут быть определены вне своего пространства имен, такие определения допустимы не в любом месте. Их разрешается помещать только в пространства, объемлющие данное. Например, определение operator+() может появиться в глобальной области видимости, в пространстве имен cplusplus_primer и в пространстве Ma­trixLib. В последнем случае это выглядит так:

// ---- primer.C --

#include "primer.h"

namespace cplusplus_primer {

    MatrixLib::matrix MatrixLib::operator+

        ( const matrix &ml, const matrix &m2 ) { /* ... */ }

}

Член может определяться вне своего пространства только при условии, что ранее он был объявлен внутри. Последнее приведенное определение operator+() было бы ошибочным, если бы ему не предшествовало объявление в файле primer.h:

namespace cplusplus_primer {

    namespace MatrixLib {

        class matrix { /*...*/ };

        // следующее объявление не может быть пропущено

        matrix operator+ ( const matrix &ml, const matrix &m2 );

        // ...

    }

}




Содержание  Назад  Вперед