您的位置:首页 > 其它

Chapter 28.命名空间、多重继承和虚继承

2012-12-26 23:18 302 查看

命名空间

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

析构相反
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐