第七章;类的作用域---知识点及习题答案

一、类的作用域
(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类型

猜你喜欢

转载自blog.csdn.net/N1314N/article/details/89417823
今日推荐