高级程序设计

3 - 对象与类

2020-02-27 14:00 CST
2020-03-14 22:29 CST
CC BY-NC 4.0

  • 对象构成了面向对象程序设计的基本计算单位,对象的特征则由相应的类来描述。
  • 对象使用类来创建的,因此,程序中首先要定义类。
  • C++的类是一种用户自定义类型
    • 类的成员包括:数据成员和成员函数;
    • 类的成员标识符的作用域为整个类定义范围。

数据成员

数据成员是对类的对象所含的数据描述,可以是常量或变量,类型可以是任意的C++类型(void除外)。

  • 数据成员的描述格式与C的结构成员的描述格式相同。
  • 在C++旧标准中,描述数据成员时不允许进行初始化(除一些静态数据成员)。

成员函数

成员函数是对类定义中的数据成员所能实施的操作描述。

  • 成员函数的实现(函数体)可以放在类定义中(建议编译器按内联函数处理)。
  • 成员函数的实现也可以放在类定义外(即声明与定义分开,定义需要用类名受限)。

为了提高效率,对内联函数的调用会把函数体中的语句嵌入调用点来执行。对于简单的(只有几条语句)函数,将函数实现为内联函数效率较高。

类成员函数名是可以重载的(析构函数除外),它遵循一般函数名的重载规则。

类成员的访问控制

在C++的类定义中,可以用访问控制修饰符publicprivateprotected来控制在类的外部对类成员的访问限制。

  • public:访问不受限制;
  • private:本类、友元;
  • protected:本类、派生类、友元。

可以有多个访问控制说明,默认访问控制是private

一般来说,类的数据成员和在类的内部使用的成员函数应该指定为private,只有提供给外界使用的成员函数才指定为public

  • 具有public访问控制的成员构成了类与外界的一种接口(interface)。
  • 在一个类的外部只能访问该类接口中的成员。

对象

  • 类属于类型范畴的程序实体,一般存在于静态(编译前)的程序中。
  • 动态(运行中)的OOP程序则是由对象构成,对象在程序运行时创建。

对象的创建和标识

  • 直接方式:
    • 在程序中定义一个类型为类的变量。
    • 对象在进入相应变量的生存期时创建,通过变量名来标识和访问。相应变量的生存期结束时,对象消亡。
    • 分为全局对象、局部对象和成员对象。
  • 间接方式(动态对象)
    • 在程序运行时刻,通过用new操作来创建对象,用delete操作来撤销(消亡)。
    • 对象通过指针来表示和访问。
    • 撤销动态对象数组时,注意使用delete []foo

成员对象

对于类的数据成员,其类型可以是另一个类,即一个对象可以包含另一个对象。

成员对象跟随包含它的对象一起创建。

在类中说明一个数据成员的类型时,如果未见到相应类型的定义或相应的类型未定义完,则该数据成员的类型只能是这些类型的指针或引用类型。

对象的操作

对于创建的一个对象,需要通过向它发送消息(调用成员函数)来对它进行操作。

  • 在类的外部,通过对象来访问类的成员时要收到类成员访问控制的限制。
  • 可以对同类对象进行赋值(默认将对象的数据成员分别进行赋值)。
  • 可以获取对象的地址并对指针进行赋值;
  • 可以把对象作为参数传给函数(实参、形参);
  • 可以把对象作为函数的返回值。