美文网首页C/C++
(二十八)内部类和名字空间

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

作者: RGiskard | 来源:发表于2018-11-06 21:42 被阅读0次
  • 把一个类定义在另一个类的内部,就称为内部类。内部类可以有效避免名字冲突问题。而名字空间是解决该问题的终极解决方案,内部类较为常用,名字空间不太常用。

内部类

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

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

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

  • 内部类若被private或protected修饰时,则被隐藏在内部,外部无法访问
  • 内部类可以自由访问外部类的private或protected成员
  • 内部类B和外部类A既不是父类和子类的关系,也不是朋友关系
  • A::B和C::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用于定义枚举类型,本质上等同于int型

    //enum定义一个新的整数类型Weekday,定义了7个字面常量,Sunday(0),Monday(1)...
    enum Weekday
    {
        Sunday,
        Monday,
        ...
    };
    
    Weekday day = Monday;
    //day的值为1,占有4个字节
    
    //black为0,red指定为2,green为red+1为3,blue指定为5
    enum Color
    {
        black,
        red = 2,
        green,
        blue = 5
    };
    
内部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;

相关文章

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

    把一个类定义在另一个类的内部,就称为内部类。内部类可以有效避免名字冲突问题。而名字空间是解决该问题的终极解决方案,...

  • 内部类

    成员内部类 局部内部类(定义在方法内和定义在作用域内的类) 匿名内部类

  • Java匿名内部类

    导语 学完匿名内部类就懂的情书。 主要内容 接口与抽象类和匿名内部类的关系 具体内容 匿名内部类也就是没有名字的内...

  • java中的匿名内部类总结

    匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 但使用匿名内...

  • Java 内部类

    内部类包括成员内部类、方法内部类、*静态内部类、匿名内部类*。 内部类的作用 由于内部类的实现和外部类没有关系,内...

  • Java学习——内部类

    内部类 一,成员内部类(包括静态内部类和非静态内部类) 非静态内部类可以直接访问外部类的成员,反之则不行 非静态内...

  • 内部类

    内部类 1.可以访问访问其外部类所有属性和方法,无需创建外部类对象 2.必须创建内部类对象,否则无法从外部类访问内...

  • 2019-02-01——内部类

    1.静态内部类和成员内部类的用法?2.内部类的修饰符有什么用? 一.关于内部类的分类内部类广义上可分为四种:成员内...

  • 方法内部类

    定义在外部类方法中的内部类,也称局部内部类方法内部类1.定义在方法内部,作用范围也在方法内2.和方法内部成成员使用...

  • 内部类与Android接口

    基本概念 内部类的点this和点new 要想直接创建内部类的对象,不能按照想象的方式,去引用外部类的名字dotNe...

网友评论

    本文标题:(二十八)内部类和名字空间

    本文链接:https://www.haomeiwen.com/subject/kcupxqtx.html