一、面向对象程序的基本特点

1.抽象。抽象又分为数据抽象和代码抽象。

以钟表为例:

数据抽象:描述某类对象的属性或状态(对象相互区别的物理量),如int hour, int minute, int second等。

代码抽象:描述某类对象的共有的行为特征或具有的功能,如setTime() , showTime()等。

封装:将抽象出的数据、代码封装在一起,形成类。

目的:增强安全性和简化编程,使用者不必了解具体的实现细节,而只需要通过外部接口,以特定的访问权限,来使用类的成员。
实现封装:类声明中的{}

例如:

class  Clock {

public:

void setTime(int newH, int newM, int newS);
void showTime();

private:

int hour, minute, second;

};

public函数提供了类对外的访问接口,setTime()和showTime()是外部访问接口。private里面几个数据则是隐藏在类里面的,从外面看不到的。

2、继承。在已有类的基础上,进行扩展形成新的类。

3、多态:同一名称,不同的功能实现方式。
目的:达到行为标识统一,减少程序中标识符的个数。
实现:重载函数和虚函数

二、类与对象

类与对象的定义

对象是现实中的对象在程序中的模拟。 类是同一类对象的抽象,对象时类的某一特定实体。通过定义类的对象,才可以通过对象使用类中定义的功能。

设计一个类就是设计一个类型。

类的定义:

class 类名称
{
public:
公有成员(外部接口)
private:
私有成员
protected:
保护型成员
}

初始化类内对象值:

class Clock {

public:

void setTime(int newH, int newM, int newS);

void showTime();

private:

int hour = 0, minute = 0, second = 0;

};

Ⅰ公有类型成员

在关键字public后面声明,它们是类与外部的接口,任何外部函数都可以访问公有类型数据和函数。

Ⅱ 私有类型成员

在关键字private后面声明,只允许本类中的函数访问,而类外部的任何函数都不能访问。如果紧跟在类名称的后面声明私有成员,则关键字private可以省略。

Ⅲ保护类型成员

与private类似,其差别表现在继承与派生时对派生类的影响不同,详见第七章。

对象定义的语法
类名 对象名;

例:Clock myClock;

类成员的访问权限
类中成员互相访问:直接使用成员名访问

类外访问:使用“对象名.成员名”方式访问 public 属性的成员

类的成员函数 在类中说明函数原型;

可以在类外给出函数体实现,并在函数名前使用类名加以限定;

也可以直接在类中给出函数体,形成内联成员函数;

允许声明重载函数和带默认参数值的函数。

内联成员函数
为了提高运行时的效率,对于较简单的函数可以声明为内联形式。

内联函数体中不要有复杂结构(如循环语句和switch语句)。

在类中声明内联成员函数的方式:

将函数体放在类的声明中。

使用inline关键字。