C/C++

(二十八)内部类和名字空间

2018-11-06  本文已影响0人  RGiskard

内部类

class A
{
public:
    //定义内部类
    class B
    {
    public:
        char name[64];
    }
public:
    A()
    {
        
    }
};

A::B inner;
strcpy(inner.name,"hello");

此时内部类的名字为A::B

内部类的分离式写法
///A.h
class A
{
public:
    class Inner
    {
    public:
        Inner();
        void Set(int v);
    private:
        int value;
    }
public:
    A();
    Inner Get();
public:
    Inner m_in;
};

///A.cpp
//内部类的定义
A::Inner::Inner() : value(11)
{
    
}
void A::Inner::Set(int v)
{
    this->value = v;
}
//外部类的定义
A::A()
{
    
}
A::Inner A::Get()  //注意,返回值是Inner类型的,要写成A::Inner
{
    return m_in;
}
enum类型
内部enum类型

在类里定义enum类型

class Painter
{
public:
    enum Color
    {
        RED = 0xFF0000,
        GREEN = 0x00FF00,
        BLUE = 0x0000FF
    };
};

Painter::Color clr = Painter::RED;

名字空间

把很多名字(类名,函数名,全局变量名)定义在一个空间里,然后用一个范围符做前缀

名字空间的定义
namespace tinyxml
{
    class Document
    {
        
    };
    class Element
    {
        
    };
}

tinyxml::Document doc;
tinyxml::Element elem;
分离式写法
///tinyxml.h
namespace tinyxml
{
    class Document
    {
    public:
        Document();
        int Open();
        int AddElement(const Element& elem)
    };
    class Element
    {
    public:
        Element();
    public:
        char name[32];
        char value[64];
    };
}

///tinyxml.cpp
#include "tinyxml.h"
namespace tinyxml
{
    Element::Element()
    {
        
    }
    Document::Document()
    {
        
    }
    ...
}
using语句:解除前缀

在main函数中使用名字空间的名字需要加上前缀tinyxml::,这有些麻烦,为了避免,在main函数开头用using语句

#include "tinyxml.h"
using namespace tinyxml;

int main()
{
    Document doc;//前面的tinyxml::可以忽略
    return 0;
}

仅使用名字空间的部分名字

using tinyxml::Document;
上一篇 下一篇

猜你喜欢

热点阅读