练习7.34
如果我们把第256页Screen类的pos的typedef放在类的最后一行会发生什么情况?
解答:
编译的时候,会出现类型错误的信息。
因为非内置类型,编译器都会在使用该类型之前去寻找该类型的定义,以便分配空间(或者声明,不过声明只能使用引用和指针类型)。
当在前面找不到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;
}
解答:
这段代码并不难理解,只是为定义的类,在类外定义成员函数。
在类中,Type都是double;在类外Type都是string。
所以,这里代码必然出现错误。
将类外实现做如下的修改就可以了:
Exercise::Type Exercise::setVal(Exercise::Type parm){
val = parm + initVal();
return val;
}