C++子类实现父类纯虚函数实现父类获取子类信息

在C++中,我们可以通过继承和多态来实现代码的复用和扩展。其中,纯虚函数是实现多态的重要机制之一。在父类中声明一个纯虚函数,在子类中实现该纯虚函数,可以实现子类对父类的扩展和改进。

在本篇博客中,我将介绍如何通过子类实现父类纯虚函数来实现父类获取子类信息的功能,并提供一个简单的例子。
ps:以前不咋接触OOP,工作中用到有点迷糊,写过之后才发现这么简单好用,实践是检验真理的唯一标准!!

实现父类纯虚函数

在C++中,我们可以在父类中声明一个纯虚函数,用= 0来表示该函数是纯虚函数,需要在子类中实现。在子类中实现父类纯虚函数时,需要使用override关键字来明确表示实现了父类的纯虚函数。

下面是一个简单的例子:

class Animal {public:virtual void makeSound() = 0;
};class Cat : public Animal {public:void makeSound() override {cout << "Meow~" << endl;}
};int main() {Animal* animal = new Cat();animal->makeSound(); // output: Meow~return 0;
}

在上面的例子中,我们定义了一个Animal类和一个Cat类,其中Cat类继承自Animal类。在Animal类中声明了一个纯虚函数makeSound(),在Cat类中实现了该纯虚函数。在main()函数中,我们创建了一个Cat类的实例,并将其赋值给一个Animal类型的指针。然后,调用animal->makeSound()方法,输出了Meow~

可以看到,在子类中实现了父类的纯虚函数后,我们可以通过父类指针来调用该函数,实现了多态的效果。

父类获取子类信息

在上面的例子中,我们只是简单地实现了父类的纯虚函数,并没有实现父类获取子类信息的功能。如果我们想要实现这个功能,可以在子类中实现父类纯虚函数时,传入一个参数,用于标识子类的信息。

下面是一个修改后的例子:

class Animal {public:virtual void makeSound(string name) = 0;
};class Cat : public Animal {public:void makeSound(string name) override {cout << "This is a cat named " << name << "." << endl;}
};int main() {Animal* animal = new Cat();animal->makeSound("Tom"); // output: This is a cat named Tom.return 0;
}

在上面的例子中,我们在Animal类中的纯虚函数makeSound()方法中增加了一个参数name,用于表示动物的名称。在Cat类中实现了makeSound()方法,并在其中输出了猫的信息。在main()函数中,我们创建了一个Cat类的实例,并将其赋值给一个Animal类型的指针。然后,调用animal->makeSound("Tom")方法,输出了This is a cat named Tom.

可以看到,在子类中实现了父类的纯虚函数时,我们可以传入一些参数,用于标识子类的信息。父类可以通过这些参数来获取子类的信息,实现更加灵活的功能。

总结

通过子类实现父类的纯虚函数,我们可以实现多态的效果,同时也可以实现父类获取子类信息的功能。在实际的开发中,我们可以根据具体的需求来灵活地使用这种技巧,提高代码。

C++子类实现父类纯虚函数实现父类获取子类信息相关推荐

  1. C++ 的纯虚函数一定要在子类实现呀

    C++的纯虚函数作为多态很重要的一环,充当了给子类接口的功能.但是这个接口一定要在子类实现才能通过编译. 但是为什么一定要在子类实现呢???? 首先我们要明确一个概念,就是函数申请时我们在函数体里什么 ...

  2. c++纯虚函数在父类中调用的规避

    构造和析构函数不允许调用纯虚函数,可以先调用虚函数,里面再调用纯虚函数实现. class Base{ public:     virtual void foo()=0;     Base() { ca ...

  3. 虚函数和纯虚函数的区别

    首先:强调一个概念 定义一个函数为虚函数,不代表函数为不被实现的函数. 定义他为虚函数是为了允许用基类的指针来调用子类的这个函数. 定义一个函数为纯虚函数,才代表函数没有被实现. 定义纯虚函数是为了实 ...

  4. C++ 虚函数和纯虚函数的区别

    首先:强调一个概念 定义一个函数为虚函数,不代表函数为不被实现的函数. 定义他为虚函数是为了允许用基类的指针来调用子类的这个函数. 定义一个函数为纯虚函数,才代表函数没有被实现. 定义纯虚函数是为了实 ...

  5. C++之抽象基类与纯虚函数

    // Vitual_Base.cpp : Defines the entry point for the console application. //抽象基类与纯虚函数#include " ...

  6. C++虚函数和纯虚函数的区别

    1.虚函数和纯虚函数可以定义在同一个类中,含有纯虚函数的类被称为抽象类,而只含有虚函数的类不能被称为抽象类. 2.虚函数可以被直接使用,也可以被子类重载以后,以多态的形式调用,而纯虚函数必须在子类中实 ...

  7. C++基本概念复习之二:多重继承、虚继承、纯虚函数(抽象类)

    一.多重继承: #include <iostream> using namespace std; class Horse { public: Horse(){cout<<&qu ...

  8. 【C++grammar】访问控制与抽象类与纯虚函数

    目录 一.访问控制 (可见性控制) 1.private.public.protected关键字 2.关键字示例 1.关键字对类数据成员访问的限制 3. 公有继承 4. 私有继承 5. 保护继承 6. ...

  9. c++多态--2(计算器,纯虚函数和抽象类)

    为什么要用多态 早期方法不利于扩展 开闭原则 开闭原则 对扩展开放 对修改关闭 利用多态实现-利于后期扩展,结构性非常好,可读性高,效率稍微低,发生多态内部结构复杂 多态成立的条件 又继承 子类重写父 ...

最新文章

  1. PHP源码迁移到GitHub
  2. Android Studio无法打开解决方法
  3. Android 利用addView 动态给Activity添加View组件
  4. 每天改變或學習一點點 終究聚沙成塔
  5. AngularJs通过路由传参解决多个页面资源浪费问题
  6. 安卓系统通过陀螺仪计算当前坐标(焦点位置)
  7. hiveserver2启动不起来_汽车一键启动只能用来打火吗 车主必须知道的几个“隐藏”技巧!...
  8. Mongoose多数据库连接及实用样例
  9. Redis 6.0 源码阅读笔记(1) -- Redis 服务端启动及命令执行
  10. 内点法(interior point method)求解二次规划,附python代码
  11. python绘制直方图显示数字_Python实现柱状图【数字精准展示,使用不同颜色】
  12. 一元线性回归(最小二乘法)
  13. Android开发学习(3)Hello Android!
  14. 【机器学习笔记2】多元线性回归模型
  15. MYS-6ULX-IOT 开发板测评——Yocto 创建嵌入式 Linux 发行版
  16. 手机usb外接摄像头 diy红外夜视仪
  17. Java开发学习进阶路线
  18. c语言建立26个字母的顺序表,线性表的操作建立一个含26个英文字母的数据元素的线性表并输出该表 爱问知识人...
  19. AutoMapper的使用方法
  20. 教您正确理解时钟器件的抖动性能

热门文章

  1. VMware Workstation 7.0 虚拟机安装雪豹snow leopard 10.6!
  2. ArcGIS基础——要素数据格式(二)
  3. 《初级会计电算化实用教程(金蝶ERP—K/3版)》一第2章 企业实施会计电算化的人员组织与制度维护2.1 会计电算化的总体规划...
  4. 高速缓存技术(1):基本原理
  5. Python+Selenium webdriver mange用法-告别手动下载driver
  6. 2021年上半年健身总结
  7. 电液伺服阀闭环控制放大器
  8. 有什么EXCEL翻译技巧可以简单翻译表格中的英文
  9. co01设置错误消息_sw2014打开装配体,提示数据库设置错误
  10. 毕业设计-深度学习的施工安全帽图像检测算法