C++类的定义之作用域

来源:互联网 发布:刘德华唱功知乎 编辑:程序博客网 时间:2024/06/06 07:05

(继上一篇)

每个类都定义了自己的新作用域和唯一的类型。在类的定义体内声明内成员,将成员名引入类的作用域。两个不同的类具有两个不同的类作用域。

例如:

Class First {

int memi;

double memd;

 };

Class Second {

int memi;

double memd;

};

First obj1;

Second obj2=obj1;//error:obj1and obj2 have different types

上例说明 即使两个类具有完全相同的成员列表,它们也是不同的类型。每个类的成员不同于任何其他类(任何其他作用域)的成员。在类作用域之外,成员只能通过对象或指针分别使用成员访问操作符".""->"来访问。如 

Class obj;

Class *ptr = &obj;

ptr->member; ptr->memfcn();

obj.member; obj.memfcn();

另外也能用作用域操作符来访问 如

Double Sales_item::avg_price() const

{

if(units_sold)

return revenue/units_sold;

else

return 0;

}

在上述例子中,我们用完全限定名Sales_item::avg_price来指定这是类Sales_item作用域中的avg_price成员的定义。(一旦看到完全限定名,就知道该定义是在类作用域中)因为是在类作用域中 所一调用 revenueunits_sold不需要写成 this->revenuethis->units_sold。同时 定义于类外部的成员函数中,形参表和成员函数体都出现在成员名之后,这些都是在类作用域中定义,所以可以不用限定而引用其他成员。

与形参类型相比,返回类型定义在成员名字前面。如果函数在类定义体外定义,那么用于返回类型的名字在类作用域之外。如果返回类型使用由类定义的类型,则必须使用完全限定名。如

Class Screen{

Public:

 Typedef std::string::size_type index;

 Index get_cursor() const;

};

inline Screen::index Screen::get_cursor() const

{

return cursor;

}

该函数返回类型是index,这是在Screen类内部定义的一个类型名。

原创粉丝点击