美文网首页
C++面向对象编程笔记(三) GeekBand

C++面向对象编程笔记(三) GeekBand

作者: CharlesW | 来源:发表于2016-05-30 08:22 被阅读0次

    继承

    通过继承,可以利用已有的类来定义新的类。所定义的新的类不仅拥有新定义的成员,而且还同时拥有旧的成员。我们称已存在的用来派生新类的类为基类,又称为父类。由已存在的类派生出的新类称为派生类,又称为子类。

     例1

    class Base{  }

    class Derived : public Base {    }

    冒号指出Derived类的基类是Base类。例中表明Base类是公有基类,这被称为公有派生。使用公有派生,基类的公有成员将成为派生类的公有成员,基类的私有部分也将成为派生类的一部分,但只能通过基类的公有和保护方法访问。

    继承关系下的构造与析构

    创建派生类对象时,程序首先调用基类构造函数,再调用派生类构造函数。基类构造函数负责初始化继承的数据成员;派生类构造函数主要用于初始化新增的数据成员。派生类的构造函数总是调用一个基类构造函数,可以使用初始化器列表语法指明要使用的基类构造函数,否则将使用默认的基类构造函数。

    派生类对象过期时,程序将首先调用派生类析构函数,再调用基类析构函数。

    需要注意一点,基类应包含一个虚析构函数,即使有时并不需要析构函数。如果析构函数不是虚的,则将只调用对应于指针类型的析构函数。例如

    ...

    Base * p = new Derived(...);

    delete p;

    ...

    这意味着只有Base的析构函数被调用,即使指针指向的是一个Derived对象。如果析构函数是虚的,将调用相应对象类型的析构函数。因此基类使用虚析构函数可以确保正确的析构函数序列被调用。

    虚函数(virtual functions)

    有时我们希望同一个方法在基类和派生类中的行为是不同的的,这时我们可以将基类方法声明为虚的,然后在派生类中重新定义基类的方法。这样,程序将根据对象类型而不是引用或指针的类型来选择方法版本。

    non-virtual函数:你不希望子类重新定义它。

    virtual函数:你希望子类重新定义它,且它已有默认定义。

    pure virtual函数:你希望子类一定要重新定义它,你对它没有默认定义。

    相关文章

      网友评论

          本文标题:C++面向对象编程笔记(三) GeekBand

          本文链接:https://www.haomeiwen.com/subject/wlpqdttx.html