面向对象编程

面向对象编程的三个特性

  1. 数据抽象:实现了接口(interface)与实现(implementation)的分离;
  2. 继承:指明了相似类之间的关系;
  3. 动态绑定:在一定程度上忽略了相似类型之间的区别,而以统一的方式使用它们的对象。具体调用基类还是派生类的函数需要在运行时才能确定。在C++中,当我们使用基类的引用或指针调用一个虚函数时将发生动态绑定。(函数的参数是(const) baseClass & 或者 (const) baseClass *),e.g.
    // caculate and print the price for the given number of copies, applying any discounts
    double print_total(ostream &os, const Quote &item, size_t n)
    {
        // depending on the type of the object bound to the item parameter
        // calls either Quote::net_price or Bulk_quote::net_price
        double ret = item.net_price(n);
        os << "ISBN: " << item.isbn() // calls Quote::isbn
           << " # sold: " << n << " total due: " << ret << endl;
    }

概念

基类:base class

派生类:derived class

需要派生类单独实现的成员函数需要声明为virtual,即虚函数。

继承

形式

继承的形式是在类名后面紧跟 : (access specifier) base class,例如

class Quote { // base class
public:
    std::string isbn() const;
    virtual double net_price(std::size_t n) const;
};

class Bulk_quote : public Quote { // Bulk_quote inherits from Quote
public:
    double net_price(std::size_t) const override;
};

其中,public说明我们可以吧派生类的对象作为基类的对象使用,即可以把Bulk_quote的对象当做Quote的对象来使用。

virtual关键字

所有非static和构造函数的函数都可以声明为virtual,基类的函数一般都要定义为virtual,而且即使析构函数的函数体是空的,也需要定义为virtual关键字virtual只能出现在类内部的声明语句之前而不能用于类外部的函数定义。如果基类中的某个函数是虚函数,那么派生类中的也隐式的为虚函数。

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

13 − 6 =

95 − = 92