类域

 class String {
public:

// 错误: 名字 index_type 还没有被声明
char& operator[]( index_type );
typedef int index_type;
};

 

在类定义中用到的名字必须在使用前首先被声明这个规则有两种例外的情况第一个
例外是对于被用在inline 成员函数定义中的名字第二个例外是于被用作缺省实参的名字
我们来依次了解每一种情况

==================

注意成员_string 是在类体中operator[]()的定义之后被声明的这是可以的在operator[]()
函数体中_string 不是一个未声明的名字

 

缺省实参也是在名字解析的第二步——在类的完整域中被解析例如成员函数clear()
的声明使用了定义在后面的静态成员bkground 的名字
class Screen {
public:
// bkground 指向在类定义中后来声明的静态成员
Screen& clear( char = bkground );
private:
static const char bkground = '#';
};
尽管在成员函数声明中的缺省实参是在类的完整域中被解析的但是如果缺省实参引用
了一个非静态成员则程序仍然是错的非静态数据成员在它的值被程序使用之前必须先
被绑定到该类类型的对象上或绑定到指向该类类型的对象的指针上把非静态数据成员用
作缺省实参违背了这个限制

 

在类体之外的类成员定义中在被定义的成员名字之前的程序文本不在该类的域内
如果这些程序文本要引用类成员则必须使用域解析操作符例如如果静态成员的类型是
类Account 的typedef 成员Money 则在类体之外定义静态数据成员时名字Money 必须被
限定修饰
class Account {
typedef double Money;
// ...
private:
static Money _interestRate;
static Money initInterest();
};
// Money 必须用 Account:: 限定修饰
Account::Money Account::_interestRate = initInterest();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值