一、类的作用域
(1)如果我们给Screen添加一个如下所示的size成员将发生什么情况?如果出现了问题,请尝试修改它。
pos Screen::size() const
{
return height *width;
}
解析:知识点1:一个类就是一个作用域,函数使用的相关变量名,已经明确了在类的作用域当中,所以不必再进行说明
知识点2:在类的外部定义的函数,必须声明类作用域,其函数名和返回类型都需要进行声明
此题的pos在类中声明定义,在外部使用时需要声明作用域
Screen::pos Screen::size() const
(2)如果我们把C++primer课本的第256页Screen类的pos的typedef放在类的最后一行会发生什么情况?
知识点1:名字查找的顺序:由内而外、自上而下
知识点2:类的定义处理步骤:首先编译成员的声明,直到类全部可见是再编译函数体
即成员函数在类的声明全部处理完之后才会被定义,所以可以调用函数中定义的任何名字
知识点3:在类中,类型名要特殊处理,最好是定义在类的一开始,并且不能与外层作用域中同名
此题中,会出现错误:pos未定义
(3)解释下面代码的含义,说明其中的 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;
}
Type有两种类型,应将最后一个函数的Type也声明为Exercise::作用域,因为返回值是double类型