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

前言

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则声明了纯虚函数,纯虚函数相当于接口,派生类必须实现该接口。

抽象基类

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

示例 文本行查询程序

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 13,153评论 1 51
  • C++ 面向对象编程 博客园地址:http://www.cnblogs.com/xiongxuanwen/p/42...
    先之阅读 3,911评论 0 1
  • C++虚函数 C++虚函数是多态性实现的重要方式,当某个虚函数通过指针或者引用调用时,编译器产生的代码直到运行时才...
    小白将阅读 5,674评论 4 19
  • 一、程序设计概念等 结构化程序设计特点: 程序设计=数据结构+算法程序内容=过程+过程调用 面向对象的程序设计方法...
    C2U阅读 3,975评论 0 1
  • 1. 结构体和共同体的区别。 定义: 结构体struct:把不同类型的数据组合成一个整体,自定义类型。共同体uni...
    breakfy阅读 6,471评论 0 22

友情链接更多精彩内容