美文网首页
C++ 面向对象程序设计 总结

C++ 面向对象程序设计 总结

作者: linanwx | 来源:发表于2017-12-14 13:53 被阅读0次

    前言

    C++与C最大的不同是面向对象。虽然我了解一些有关面向对象的概念,写过一些函数,可惜实际中很少用到。本文是C++ Primer第15章的快速总结。

    概述

    面向对象程序设计又称为OOP,其核心思想是:数据抽象、继承和动态绑定。数据抽象指的是,声明与实现分离,继承指的是子类获得父类的所有成员,动态绑定是调用类的函数时根据类的不同进行区别调用。

    声明基类与派生类

    下面的代码进行简单的示例,声明了一个基类animal与派生类cat。

    #include <stdio.h>
    #include <iostream>
    
    class animal
    {
      public:
        virtual void eat(){};
    };
    
    class cat : public animal
    {
      public:
        void eat() { std::cout << "eat fish" << std::endl; }
    };
    
    int main()
    {
        cat c;
        c.eat();
    }
    

    类型转换与继承

    派生类的指针和引用可以转为基类的指针或引用,基类的指针或引用不能转化为派生类的指针或引用。这意味着,一个基类的指针,指向的对象,有可能是基类,也有可能是派生类,但肯定不是基类的父类。

    派生类对象可以赋值给基类,但只会拷贝基类的部分。

    虚函数

    虚函数在运行时进行解析。我们继续上面的例子,假如我们写了一个新的函数,是doeat,内部调用了animal的eat方法。eat对animal是eat meat or grass,但是最后显示的结果是eat fish。这就证明了,在运行时,doeat函数调用animal的eat方法时,eat方法找到了引用对象的真实对象cat的eat方法并进行了调用。

    class animal
    {
      public:
        virtual void eat() { std::cout << "eat meat or grass" << std::endl; };
    };
    
    class cat : public animal
    {
      public:
        void eat() { std::cout << "eat fish" << std::endl; }
    };
    
    void doeat(animal &a) { a.eat(); }
    
    int main()
    {
        cat c;
        doeat(c);
    }
    

    另外,为了养成良好的习惯,在派生类中最好使用override来显式的声明覆盖的虚函数。

    纯虚函数

    在定义虚函数后赋值为0则声明了纯虚函数,纯虚函数相当于接口,派生类必须实现该接口。

    抽象基类

    含有纯虚函数的类是抽象基类。抽象基类不能创建。

    示例 文本行查询程序

    给定一段文本,要求查询其中的内容。支持单词查询、逻辑查询。

    相关文章

      网友评论

          本文标题:C++ 面向对象程序设计 总结

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