命名空间
using声明eg:
using std::list;//推荐
using指示
eg:
using namespace std;
防止命名空间污染,可不连续
eg:
namespace [NameSpaceName]
{
//自成一域,在[NameSpaceName]这个命名空间中
}
命名空间可嵌套
内部的成员会把外部的同名成员屏蔽
eg:
namespace A
{
int a;
namespace B
{
int a;//hide A::a whthin B
}
}
访问如下:
A::a;
A::B::a;
匿名命名空间
eg:
namespace local
{
//相当于一个局域作用域
//可以取代static成员,使成员在文件外不可见
namespace
{
int i;
}
}
local::i=42;
多重继承
eg:
class Bear : public ZooAnimal
{
};
class Panda : public Bear, public Endangered
//派生列表决定构造/析构顺序,先看Bear,Bear如果有基类就先ZooAnimal,再Bear,再下一个派生列表成员Endangered
{
Panda(std::string name,bool on Exhibit)
:[Bear(...),]Endangered(...)
{
}
};
构造顺序
ZooAnimal→Bear→Endangered→Panda
析构顺序
ZooAnimal←Bear←Endangered←Panda
多重继承下的虚函数、复制控制类作用域略
虚继承
应用于一个基类多次在派生层次中出现,但只继承一个共享的基类子对象共享的基类子对象称为虚基类
eg:
class istream : public virtual ios{};
class ostream : public virutal ios{};
eg:
class Bear : virtual public ZooAnimal{};//Bear科
class Raccoon : public virtual ZooAnimal{};//Raccoon科
class Panda : public Bear, public Raccoon, public Endangered{}
构造顺序
先是虚基类→再按上面多重继承的顺序来
eg:
class Character{};
class BokkCharacter : public Charracter{};
class ToyAnimal{};
class TeddyBear : public BookCharacter, public Bear, public virtual ToyAnimal{};//其中Bear有ZooAnimal这个虚基类
顺序如下:
ZooAnimal
ToyAnimal
Character
BokkCharacter
Bear
TeddyBear
析构相反