C++Primer第五版 第7章 类 7.4类的作用域 练习

C++Primer第五版 第7章 类 7.4类的作用域 练习

7.4类的作用域

练习7.33 如果我们给Screen添加一个如下所示的size成员将发生什么情况?如果出现了问题,请尝试修改它。

pos Screen::size() const
{
 return height * width;
}

答:出错error: unknown type name ‘pos’;
改为Screen::pos Screen::size() const { return height * width; }使返回类型作用在类的作用域内。

7.4.1 名字查找与类的作用域

练习7.34 如果我们把第256页Screen类的pos的typedef放在类的最后一行会发生什么情况?
答:出错error: unknown type name ‘pos’;使用该类型的成员只有在类名定义之后才可以正常使用。

练习7.35 解释下面代码的含义,说明其中的Type和initVal分别使用了哪个定义。如果代码存在错误,尝试修改它。

typedef string Type;
Type initVal();
class Exercise {
public:
	typedef double Type; 
	Type setVal(Type); 
	Type initVal();
private:
	int val;
};
Type Exercise::setVal(Type parm) {
	val = parm + initVal(); 
	return val;
}

答:setVal的返回值类型是Exercise类作用域下的Type–实际是double,而在类外定义setVal函数时,其返回值类型虽然也是Type,但并不在类的作用域中,实际为string;
至于setVal函数中的initVal函数作用域为Exercise类–因为一旦遇到类名,定于的剩余部分,包括参数列表和函数体,就在类的作用域之中了。
修改setVal函数的定义为Exercise::Type Exercise::setVal(Type parm) { val = parm + initVal(); return val; }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值