读书人

JAVA转型C++(3):面向对象

发布时间: 2013-03-21 10:08:17 作者: rapoo

JAVA转型C++(三):面向对象
一、类

C++中定义类的机制与JAVA很不相同。在C++中定义类的方法是:以关键字class开头,然后是类的名称。类主体用花括号括起来,并以一个分号结尾。
类的定义中需要声明数据成员与数据函数。可以在类定义的外部定义成员函数。要在类的外部定义函数,需要用类名与域解析运算符(::)来对其进行限定,以便让编译器知道该类定义属于哪个类。
类中的数据成员可以使基本数据类型,也可以是其他对象类型。我们可以使用面向对象编程中的聚合体来模拟这种对象之间的关系。

数据成员的访问以及成员函数的调用在C++中均与JAVA类似,不再赘述。需要注意的是C++中的对象实例化与基本数据类型的声明一样,都是“类名 对象名;”的形式。在C++中的new关键字是动态分配内存,返回的是新建对象的地址,而且分配的内存都是要靠delete()函数回收的,否则会造成内存泄露。
到目前为止,无论何时定义一个变量,C++都会为其分配所需的内存。常规的定义方式中,当创建变量的函数结束时,C++会释放这部分内存。这部分用于局部变量的内存成为栈。但是用new关键字(以及C语言中malloc关键字)创建的内存是一种与程序中的函数保持独立的内存。这部分内存由程序员负责分配与释放。它们统称为堆(或自由存储区)。
new运算符在堆中分配内存,然后返回其地址。如以下代码:

class Boss : public Enemy

实际上,基类的一些成员函数并没有被派生类继承。它们是:构造函数、拷贝构造函数、析构函数、重载的赋值运算符。在派生类中必须自己编写这些函数。而另外要知道的是,在实例化派生类的对象时,自动调用基类的构造函数,但也可以从派生类的构造函数中显式地调用基类构造函数。析构函数也与其类似。

当从一个类派生新类时,可以控制派生类访问基类成员的权限。例如上述代码中在Enemy前有一个public,说明成基类中的共有成员成为派生类中的共有成员,保护成员成为保护成员,私有成员成为私有成员。

对于任何继承的积累成员函数,如果期望在派生类中对其进行重写,则应当使用关键字virtual将其声明为虚函数。在将一个成员函数声明为虚函数时,这位成员的重写版本提供了一种方法,使得成员函数能如预期那样用于对象的指针与引用。而在成员定义中不出现virtual关键字。一旦成员函数被声明为虚函数,它在任何派生类中都是虚函数。在重写一个虚成员函数时,不必再声明中使用关键字virtual。但提倡应当使用该关键字提醒我们这是一个虚函数。

读书人网 >C++

热点推荐