成员函数
将关键字const加在形参表之后,就可以将成员函数声明为常量:
double avg_price() const
const成员不能改变其所操作的对象的数据成员,const必须同时出现在声明和定义中,若只出现在一处,就会出现编译时错误。
为类的成员使用类声明
只有当类定义已经完成,数据成员才能被指定为该类类型。如果该类型是不完全类型,那么数据成员只能是指向该类类型的指针或引用。
只有当类定义体完成后才能定义类,因此类不能具有自身类型的数据成员。然而只要类名一出现就认为该类已声明,因此,类的数据成员可以是指向自身类型的指针或引用:
class LinkScreen{
Screen window;
LinkScreen *next;
LinkScreen *prev;
};
隐含的this指针
尽管在成员函数内部显式引用this通常不必要,只有一种情况必须采用:当需要将一个对象作为整体引用而不是引用对象的一个成员时。即该函数返回对调用该函数的对象的引用。
class Screen{
public:
Screen& move(index r, index c);
Screen& set(char);
Screen& set(index,index,char);
}
Screen& Screen::set(char c)
{
contents[cursor]=c;
return *this;
}
Screen& Screen::move(index r,index c)
{
index row=r*width;
cursor=row+c;
return *this
}
其中,this是一个指向非常量Screen的指针。
函数返回类型不一定在类作用域中
与形参类型相比,返回类型出现在成员名字前。若函数在类定义体之外定义,则用于返回类型的名字在类作用域之外。若返回类型使用由类定义的类型,必须使用完全限定名。如:
class Screen{
public:
typedef std::string::size_type index;
index get_cursor() const;
};
inline Screen::index Screen::get_cursor() const
{
return cursor;
}
必须使用完全限定的类型名Screen::index来指定所需要的index是在类Screen中定义的名字。