“面向对象”在软件界是众所周知的。其实,面向对象的程序设计(OOP即Object Oriented Programming)其实是一种观念,用什么语言实现都可以。只不过使用面向对象程序语言(Object Oriented Programming Language)更加的便利(因为是专门为面向对象观念而发展出来的,并完成了面向对象的封装、继承、多态等特性)。
C++是最重要的面向对象的语言,因为它站在C语言的肩膀上(C语言的地位相信无人能反驳)。C++其实并非纯粹的面向对象的程序语言,它即继承了C语言的特性,又在C语言基础上添加了面向对象的新特性。但是这种混血使得它更加强大。(所谓的纯面向对象语言,是指不管什么东西,都应该存在于对象中,JAVA和Small Talk都是纯面向对象语言)
1、类及其成员-----谈封装(encapsulation)
什么是对象?什么是类呢?对象就是我们周围的所有东西,类就是这些东西的属性。比方说,正方形这个东西(对象),有一些共有的属性(比如四个角,四条边,每边都是直角),这些共有的属性的集合就是类。
对象的属性有两大成员,我们通常称为成员变量(member variable)和成员函数(member function)。一般而言,成员变量通常由成员函数处理之。
如果我们以CSquare代表“正方形”这种类,正方形有color,正方形可以display。那么,color就是一种成员变量,display就是一种成员函数。
CSquare square; //声明square是一种正方形
square.color = RED; //设定成员变量,RED代表一个颜色值
square.display(); //调用成员函数
下面是C++语言对于CSquare的描述:
class CSquare //通常以C作为类名称的开头
{
private:
int m_color; //通常以m_作为成员变量的名称开头
public:
void display() { ... }
void setcolor( int color) { m_color = color; }
};
成员变量可以在类内被处理,也可以开放给外界处理。以数据封装的目的而言,自然是前者较为妥当,但有时候也不得不开放。为此,C++提供了private、public和protected三种修饰词。一般而言,成员变量尽量声明为private,成员函数则通常声明为public。上例中m_color既然声明为private,我们势必得准备一个成员函数setcolor,以供外界设定颜色。
把数据声明为private,不允许外界随意存取,只能通过特定的接口来操作,这正是面向对象的封装(encapsulation)特性。