现在的位置: 首页 > 综合 > 正文

C++ 命名空间的使用例子

2013年12月17日 ⁄ 综合 ⁄ 共 1924字 ⁄ 字号 评论关闭

C++ 命名空间的使用例子

 

目的:了解C++ 命名空间的使用方法.命名空间内可以使用变量,函数,类,甚至是类模板.其实命令空间可以看作是一个带公有成员的类对象.

 

源码:

[user:lib_hdmanage] cat example/main.cpp
/// @file main.cpp
/// @brief
/// @author EastonWoo

/// 0.01
/// @date 2013-04-23

namespace nm_spc
{
    int nm_val = 1;    //定义变量.可以初始化

    void print()           //定义函数
    {
        printf("namespace:nm_spc\n");
    }

    template <typename T>    //定义类模块
    class A
    {
    public:
        A(T a, T b)
        {
            m_a = a;
            m_b = b;
        }
       
        T max();
   
    private:
        T m_a;
        T m_b;
    };
   
    template <typename T>     //max函数在类模板外定义.
    T A<T>::max()
    {
            T ret = 0;
            if(m_a >= m_b)
                ret = m_a;
            else
                ret = m_b;
   
            return ret;
    }
}
 

int main()
{
    nm_spc::A<int> clsA(1,2);
    nm_spc::A<double> clsB(10000.0,20000.0);

    printf("%d\n",clsA.max());
    printf("%f\n",clsB.max());

    nm_spc::print();

    nm_spc::nm_val = 3;        //可以赋值,不赋值,nm_spc::nm_val = 1;

    printf("%d\n",nm_spc::nm_val);
    return 0;
}

 

运行结果:

[user:lib_hdmanage] ./example/main.i386.elf
2
20000.000000
namespace:nm_spc
3

 

命名空间里的实现都放到外面去实现(源码作一下变形):

[user:lib_hdmanage] cat example/main.cpp
/// @file main.cpp
/// @brief
/// @author EastonWoo
/// 0.01
/// @date 2013-04-23

namespace nm_spc
{
    int nm_val = 1;

    void print();

    template <typename T>
    class A
    {
    public:
        A(T a, T b);
       
        T max();
   
    private:
        T m_a;
        T m_b;
    };
}

void nm_spc::print()     //在命名空间外定义,须加nm_spc::   ,我们可以看出,很像类的外部定义.
{
    printf("namespace:nm_spc\n");
}

template <typename T>
nm_spc::A<T>::A(T a, T b)
{
    m_a = a;
    m_b = b;
}

template <typename T>
T nm_spc::A<T>::max()        //命名空间里的类模板的成员函数在命名空间外定义.出了两层.第一层A<T>::  ,第二层nm_spc::
{
        T ret = 0;
        if(m_a >= m_b)
            ret = m_a;
        else
            ret = m_b;

        return ret;
}

int main()
{
    nm_spc::A<int> clsA(1,2);
    nm_spc::A<double> clsB(10000.0,20000.0);

    printf("%d\n",clsA.max());
    printf("%f\n",clsB.max());

    nm_spc::print();

    nm_spc::nm_val = 3;      //相当于公有成员变量赋值
    printf("%d\n",nm_spc::nm_val);
    return 0;
}

抱歉!评论已关闭.