- 把一個(gè)類定義在另一個(gè)類的內(nèi)部力穗,就稱為內(nèi)部類吭服。內(nèi)部類可以有效避免名字沖突問題本股。而名字空間是解決該問題的終極解決方案,內(nèi)部類較為常用岸霹,名字空間不太常用。
內(nèi)部類
class A
{
public:
//定義內(nèi)部類
class B
{
public:
char name[64];
}
public:
A()
{
}
};
A::B inner;
strcpy(inner.name,"hello");
此時(shí)內(nèi)部類的名字為A::B
- 內(nèi)部類若被private或protected修飾時(shí)将饺,則被隱藏在內(nèi)部贡避,外部無法訪問
- 內(nèi)部類可以自由訪問外部類的private或protected成員
- 內(nèi)部類B和外部類A既不是父類和子類的關(guān)系痛黎,也不是朋友關(guān)系
- A::B和C::B是不沖突的,雖然名字一樣刮吧,但這是兩個(gè)不一樣的類
內(nèi)部類的分離式寫法
///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
//內(nèi)部類的定義
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用于定義枚舉類型杀捻,本質(zhì)上等同于int型
//enum定義一個(gè)新的整數(shù)類型Weekday井厌,定義了7個(gè)字面常量,Sunday(0),Monday(1)... enum Weekday { Sunday, Monday, ... }; Weekday day = Monday; //day的值為1致讥,占有4個(gè)字節(jié) //black為0仅仆,red指定為2,green為red+1為3垢袱,blue指定為5 enum Color { black, red = 2, green, blue = 5 };
內(nèi)部enum類型
在類里定義enum類型
class Painter
{
public:
enum Color
{
RED = 0xFF0000,
GREEN = 0x00FF00,
BLUE = 0x0000FF
};
};
Painter::Color clr = Painter::RED;
名字空間
把很多名字(類名蝇恶,函數(shù)名,全局變量名)定義在一個(gè)空間里惶桐,然后用一個(gè)范圍符做前綴
名字空間的定義
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函數(shù)中使用名字空間的名字需要加上前綴tinyxml::,這有些麻煩潘懊,為了避免姚糊,在main函數(shù)開頭用using語句
#include "tinyxml.h"
using namespace tinyxml;
int main()
{
Document doc;//前面的tinyxml::可以忽略
return 0;
}
僅使用名字空間的部分名字
using tinyxml::Document;