面向对象程序设计(1)-OOP概述

来源:互联网 发布:ftp服务器端口默认为 编辑:程序博客网 时间:2024/05/02 00:09

【认识】面向对象程序基于三个基本概念:

  • 数据抽象:可以将类的接口与实现分离;
  • 继承:可以定义相似类型并对其相似关系建模;
  • 动态绑定:可以在一定程度上忽略相似类型的区别,以同一的方式使用它们的对象。

继承

【认识】通过继承联系在一起的类构成一种层次关系;

  • 基类:位于层次的根部,层次的其他类直接或间接地从基类继承而来,负责定义层次关系中所有类共同拥有的成员;

  • 派生类: 通过继承基类而得到的是为派生类,定义各自特有的成员;

    定义基类与派生类

    【例子】定义基类

//定义Queote 基类class Quote{public:    Quote() = default;//默认构造函数    Quote(const std::string &book, double sales_price):                bookNo(book), price(sales_price)  { }       std::string& isbn() const { return bookNo;}    virtual double net_price (std::size_t n) const        { return n * price; }   //基类给定数量的书籍销售总额                                //派生类负责改写并使用不同折扣的计算算法    virtual ~Quote() = default;    //对析构函数进行动态绑定private:    std::string bookNo;         //书籍的ISBN 编号protected:          double price = 0.0;         //普通状态下不打折的价格};

注:

  • 派生类需要对virtual修饰的函数重新定义以覆盖从积累继承而来的旧定义。
  • 对于虚函数,当我们使用指针或引用时(其他方式呢?),该调用将被动态绑定,根据绑定的对象不同,调用可能执行不同的版本。

成员函数与继承:

  • 任何构造函数之外的非静态函数都可以是虚函数;
  • 关键字virtual只能在类内部的声明语句之前不能用于类外部的函数定义。

访问控制:

  • 默认情况下,派生类的成员函数智能访问共有成员,不能访问私有成员;
  • 可以设置protected 访问运算符修饰的成员,派生类有权访问该成员,同时禁止其他用户访问。

【例子】定义派生类

class Bulk_Quote: Quote{public:    Bulk_Quote() = default;    Bulk_Quote (const std::string&, double, std::size_t, double );    double net_price(std::size_t) const override;private:    std::size_t min_qty = 0;    double discount = 0.0;};

动态绑定

【认识】动态绑定可以使用同一段代码分别处理基类与派生类。

e.g:同一段代码(函数)运行时调用类中的函数,具体调用的版本是基类还是派生类,由运行时传入的类类型的实参决定。

动态绑定(dynamic binding)又被称为运行时绑定(run-time binding)

派生类

派生类向基类的类型转换:

(1)可以把派生类的对象当成基类对象来使用;
(2)基类类型的指针或引用绑定到派生类对象的基类部分上;
(3)derived-to-base类型转换由编译器隐式地执行。
【例子】

Quote item;Bulk_quote bulk;Quote *p = &item;p = &bulk;          //p指向bulk的Quote部分Quote &r = bulk;    //r绑定到bulk的Quote部分

派生类的构造函数:

每个类控制它自己的成员初始化过程,因此派生类不能直接初始化从基类继承而来的成员,必须使用基类的构造函数来初始化它的基类部分。

【例子】

Bulk_quote::Bulk_quote(const std::string& book, double p, std::size_t qty, double disc) :        Quote(book,p), min_qty(qty),discount(disc) { }

继承类的静态成员

基类中定义了一个静态成员,则整个继承体系中只存在该成员的唯一的定义。

0 0
原创粉丝点击