Part4 类与对象 4.1面向对象程序的基本特点 4.2类和对象的定义
对象:现实中对象的模拟,具有属性和行为。
类: 同一类对象的共同属性和行为。
4.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; };
封装:将抽象出的数据、代码封装在一起,形成类。
目的:增强安全性和简化编程,使用者不必了解具体的实现细节,而只需要通过外部接口,以特定的访问权限,来使用类的成员。
实现封装:类声明中的{}
继承:在已有类的基础上,进行扩展形成新的类。
多态:同一名称,不同的功能实现方式。
目的:达到行为标识统一,减少程序中标识符的个数。
实现:重载函数和虚函数
4.2类和对象的定义
设计类就是设计类型:
此类型的“合法值”是什么?
此类型应该有什么样的函数和操作符?
新类型的对象该如何被创建和销毁?
如何进行对象的初始化和赋值?
对象作为函数的参数如何以值传递?
谁将使用此类型的对象成员?
类定义的语法形式:
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;//没有初始值的成员将被默认初始化。 };
类的成员函数:
在类中说明函数原型;
可以在类外给出函数体实现,并在函数名前使用类名加以限定;
也可以直接在类中给出函数体,形成内联成员函数;
允许声明重载函数和带默认参数值的函数。
内联成员函数:
为了提高运行时的效率,对于较简单的函数可以声明为内联形式。
内联函数体中不要有复杂结构(如循环语句和switch语句)。
在类中声明内联成员函数的方式:
1 将函数体放在类的声明中。
2 在类外声明,使用inline关键字。
//4-1钟表类 #include<iostream> using namespace std; class Clock{ public: void setTime(int newH = 0, int newM = 0, int newS = 0); void showTime(); private: int hour, minute, second; }; //成员函数的实现 void Clock::setTime(int newH, int newM, int newS){ hour = newH; minute = newM; second = newS; } void Clock::showTime(){ cout << hour << ":" << minute << ":" << second; } //对象的使用 int main(){ Clock myClock; myClock.setTime(13,40,0); myClock.showTime(); return 0; }