C/C++编程:成员类(嵌套类)

1060 篇文章 307 订阅

类型和类型别名也可以作为类的成员。比如:

template<typename T>
class Tree{
	using value_type = T;      //成员别名
	enum Policy(rb, splay, treeps);  //成员枚举
	class Node{
		Node *right;
		Node *left;
		value_type value;
	public:
		void f(Tree *);
	};
	Node * top;
public:
	void g(const T&);
};

成员类(也叫做嵌套类)可以引用其所属类的类型和static成员。当给定所属类一个对象时,只能引用非static成员。

嵌套类可以方位所属类的成员(甚至是非static成员,这方面与成员函数类似),但它没有当前类对象的概念。比如:

template<typename T>
void Tree::Node::f(Tree * p){
	top = right;   //错误:未指定类型为Tree的对象
	p->top = right;  //ok
	value_type v = left->value;  //正确,value_type 不与某个对象关联
}

相反,一个类并没有任何特殊权限能访问嵌入类的成员:

template<typename T>
void Tree::g(const T&){
	value_type  val = right->value;  //错误,没有Tree::Node类型的对象
	value_type  v = p->right->value;  //错误,Node::right是私有的
	p->f(this);          //正确
}

成员类更多的是提供了一种符号表示上的便利,而非一种重要的语言特性。另一方面,成员别名非常重要,它是依赖于关联类型的泛型编程技术的基础。成员enum通常要用enum class替代,以避免与外围作用域中和枚举值同名的实体产生冲突

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值