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; }