跳到主要内容

类的抽象特性

this指针

this指针指向用来调用成员函数的对象(this被作为隐藏参数传递给方法)。

每个成员函数(包括构造函数和析构函数)都有一个this指针。this指针指向调用对象。如果方法需要引用整个调用对象,则可以使用表达式*this。在函数的括号后面使用const限定符 将this限定为const,这样将不能使用this来修改对象的值。 然而,要返回的并不是this,因为this是对象的地址,而是对象本身,即*this(将解除引用 运算符*用于指针,将得到指针指向的值)。现在,可以将*this作为调用对象的别名来完成前面的方法定义。

对象数组

有些时候,我们可能会需要创建同一个类的多个对象。为了达到这个目的,我们可以独立的对象变量。但是,创建对象数组很多时候会更加的合适。也就是如下的方式:

Myclass my_objects[5]; //创建一个包含5个元素的对象数组

这样,这个数组里面的每个元素都是一个独立的类对象。也就是可以通过my_objects[0].update()之类的类的操作来调用类的成员函数。

类作用域

在类中定义的名称(如类数据成员名和类成员函数名)的作用域都为整个类,作用域为整个类的名称只在该类中是已知的,在类外是不可知的。这样做的好处就是可以在不同的类中定义相同名字的成员函数,而且不会互相冲突。另外,类作用域意味着不能从外部直接访问类的成员,公有成员函数也是如此,因为公有与私有仅仅是对访问权限的控制,而不是对作用域的控制。

在类声明或成员函数定义中,可以使用未修饰的成员名称 (未限定的名称)。在类声明或成员函数定义中,可以使用未修饰的成员名称 (未限定的名称)。在其他情况下,使用类成员名时,必须根据上下文使用直接成员运算符(.)、间 接成员运算符(->)或作用域解析运算符(::)。

作用域为类的常量

有些时候,我们可能会需要某个常量拥有类作用域,从而防止发生一些奇怪的冲突。

第一种方式是在类中声明一个枚举。在类声明中声明的枚举的作用域为整个类,因此可以用枚举为整型常量提供作用域为整个类的符号名 称。

第二种方式是使用static。例如:

class ...{
private:
static const int Months = 12;
}

这个变量将具有类作用域。

抽象数据类型(ADT)

ADT以通用的方式描述数据类型,而没有引入语言或实现细节。