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

前言

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

概述

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

声明基类与派生类

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

#include 
#include 

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++ 面向对象程序设计 总结)