类的其他特性

    更多c++类的基本概念

    这里继续介绍之前没有说的一些类的特性。这些特性包括:类型成员、类的成员的类内初始值、可变数据成员、内联成员函数、从成员函数返回*this、关于如何定义并使用类类型及友元类的更多知识。

 

类成员再探

定义一个类型成员

      除了定义数据和函数成员之外,类还可以自定义某种类型在类中的别名。

      在类的public部分定义类型别名,这样用户就可以使用这个名字。类的用户不应该知道该类使用什么存放数据,因此通过把类型的别名定义成public成员可以隐藏实现细节。

      关于类中类型别名的定义有两点需要注意。首先,typedef和using都可以使用。其次,用来定义类型的成员必须先定义后使用,这一点与普通成员有所区别。因此,类型成员通常出现在类开始的地方。

内联函数

class A

{

    int a(){}//隐式内联

    inline int b();//显式内联

    int c();//能在之后被设为内联

}

    最好只在类外部定义的地方说明inline,这样可以使类更容易理解。

重载成员函数

    和非成员函数一样,匹配过程也类似。

可变数据成员

    有时我们希望能修改类的某个数据成员,即使是在一个const成员函数内。可以通过在变量的声明中加入mutable关键字做到这一点。

类数据成员的初始值

    当我们提供一个类内初始值时,必须以符号=或者花括号表示。

 

 

返回*this的成员函数

从const成员函数返回*this

    一个const成员函数如果以引用的形式返回*this,那么它的返回类型将是常量引用。

基于const的重载

    通过区分函数是否是const的,我们可以对其进行重载。

 

 

类类型

每个类定义了唯一的类型。对于两个类来说,即使它们的成员完全一样,这两个类也是两个不同的类型。

类的声明

    我们可以仅仅声明类而不定义它,这种声明被称作前向声明,它向程序中引入名字并且指明其是一种类类型。该类在声明之后定义之前是一个不完全类型

    不完全类型只能在非常有限的情景下使用:可以定义指向这种类型的指针或引用,也可以声明(但是不能定义)以不完全类型作为参数或者返回类型的函数。

    因为只有当类全部完成后类才算被定义,所以一个类的成员类型不能是该类自己。然而,一旦一个类的名字出现后,它就被认为是声明过了(但尚未定义),因此类允许包含指向它自身类型的引用或指针。

 

 

友元再探

    除了把非成员函数定义成类的友元,类还可以把其他的类定义成友元,也可以把其他类的成员函数定义成友元。此外,友元函数能定义在类的内部,这样的函数是隐式内联的。

类之间的友元关系

    必须要注意的一点是,友元关系不存在传递性。每个类负责控制自己的友元类或友元函数。

令成员函数作为友元

    要想令某个成员函数作为友元,我们必须仔细组织程序的结构以满足声明和定义的彼此依赖关系。

函数重载和友元

    如果一个类想把一组重载函数声明成它的友元,它需要对这组函数中的每一个分别声明。(尽管重载函数的名字相同,但它们仍然是不同的函数)

posted @ 2017-11-16 08:56  哲贤  阅读(205)  评论(0编辑  收藏  举报