我们已经了解了什么是OOP,现在来看一下C++在C中添加了什么来支持OOP。扩充的基本概念是类(class)。类描述了对象的形式和行为。它就像一个分类,从中你可以挤出任意多的对象,想要多少都可以。
从语法上讲,C++的类就像C的结构。它有几点直接的扩展之处以便于实现OOP。
一个栈的类如下所示:
class Stack{ //class definition
public: //access specifier
void push(int i); //member function
int pop();
Stack(); //instead of init()
~Stack(); //instead of cleanup()
private: //access specifier
int items[STACKSIZE]; //data member
int top;
};
这个简单的Stack类和在前面“抽象性”一节中说明的同名结构相似。但是要注意,类中包括了Sack的接口函数(在C版本中接口函数是在struct之外的)。这些成员函数使得抽象机制更容易实现,归类为成员函数产生的抽象性。另外,函数init()和cleanup()被成员函数Stack()和~Stack替换了。这些特殊的成员函数会使编译器来替你处理对象的初始化和销毁,会在以后的“构造函数和析构函数产生的更好的抽象性”中介绍这一点。类中还具有public和private这样的标签,这些存取说明符给予了封装形式的灵活性,会在以后的“存取说明符产生的封装性”中进行介绍。还有就是数据成员支持层次化的较简单方式--合并。在这个例子中我们没有提到的OOP的两个搞基概念是派生和多态性,他们是由结构支持的。
如果你定义了类,那么可以按照如下方式使用它:
main ()
{
Stack s;
/*......*/
s.push(s);
/*......*/
i=s.pop();
/*......*/
}
这里s是一个Stack对象。我们像声明变量一样对其进行声明,然后调用s的各种成员函数,所使用的语法和C中使用的相同。
本质上说,类是添加到程序设计语言中的新类型。一旦我们实现了Stack类,就可以像使用语言的内建类型那样使用它。我们称类为用户定义类型,来和语言的内建类型进行区分。