当前位置: 首页 > ai >正文

C++ (菱形继承,通用接口 ,多态介绍)

菱形继承

class A{public :int a;};class B:public A{};class C:public A{};class D:public B,public C{public:void function(){a=200;}    };int main(){D object;// object.a=100;  如果如此使用会产生报错 会导致一个成员在类D中出现两次,产生歧义,浪费空间object.C::a = 100;    //解决方法:通过类名来明确要访问的是哪一个成员return 0;
}

通用接口

需求:设计一个玩游戏时选角色的接口

方法:1.给每个英雄提供一个函数接口

void  playGamesByHanxin(Hanxin &hx);void  playGamesByZhongkui(Zhongkui &zk);void  playGamesByDirenjie(Direnjie &drj);

2 通过函数重载的形式提供函数接口

void  playGames(Hanxin &hx);void  playGames(Zhongkui &zk);void  playGames(Direnjie &drj);

在C++中可以使用父类的引用来引用子类的对象,也可以使用父类的指针来指向子类的对象,反过来则不行

Hanxin hx;Hero &hero1 = hx; //hx是一个英雄/*Hero hero1;Hanxin &h=hero1; //英雄不是Hanxin*/

一种接口的多种实现

1.父类的函数接口是用virtual关键字修饰变成虚函数

class Hero{public:        virtual void skill(void);};

2.子类继承父类,对父类的函数接口进行重写

 class Hanxin:public Hero{public:virtual void skill(void);};class Zhongkui:public Hero{public:virtual void skill(void);};class Direnjie:public Hero{public:virtual void skill(void);};

父类的引用来引用子类的对象或父类的指针来指向子类的对象

void playGame(Hero &hero){  hero.skill();//此时hero引用哪一个子类对象,就会这个子类对象的skill方法
}

多态的介绍

不同的对象接收到同一消息的时候,产生不同的效果

在面向对象中,多态是指通过父类的指针或者引用指向子类的对象,在运行时动态调用实际绑定对象函数的行为,即“一个接口,多种实现”

静态多态是编译器在编译期间完成的,编译器会根据实参数量来选择调用合适的函数,如果有合适的函数就调用,没有的话就会警告或报错

动态多态是在程序运行时根据基类的引用(指针)指向的对象来确定自己具体该调用哪一个类的虚函数

多态的作用 : 把不同的子类都当父类来看待,可以屏蔽不同子类对象之间的差异来写出通用的代码,做出通用的编译以适应需求的不断变化

多态是设计模式的基础,多态是框架的基础

前提条件

要有继承

要用虚函数重写(被virtual声明的函数叫做虚函数)

要有父类指针(父类引用)指向子类对象

实现步骤

基类(父类)里面的方法是用 virtual关键字修饰,变成虚函数

子类继承父类重写父类里面的虚函数

用父类的指针或引用指向子类对象

通过父类指针或引用调用子类重写父类方法

http://www.xdnf.cn/news/296.html

相关文章:

  • vxe-Table 行数据过多导致列隐藏展示卡顿问题解决方案
  • C++ 20 信号量详解
  • “图生生”商品图优化升级,多元素组合效果更优!
  • 2025,常见的AI编程工具有哪些?
  • Liunx知识点
  • 微前端框架QianKun
  • Leetcode刷题 由浅入深之哈希表——349. 两个数组的交集
  • 第J4周:ResNet与DenseNet结合探索
  • 在线绘制Cell Metabolism同款多组配对连线散点图
  • 编程规范之枚举
  • poj1067 取石子游戏 威佐夫博弈
  • Vue3笔记
  • 2364. 统计坏数对的数目 之 灵活思想、学会变形
  • 大模型Rag - embedding
  • windows下安装mcp servers
  • 从零到精通:用 GoFrame 和 go-resty 优雅调用第三方 HTTP API
  • DDoS防御发展史
  • 如何快速构建跨系统的数据同步机制?
  • uni.createInnerAudioContext踩坑duration在真机环境一直为0
  • RAG-概述
  • 贪心、动态规划、其它算法基本原理和步骤
  • Kaamel隐私与安全分析报告:Microsoft Recall功能评估与风险控制
  • VMWARE安装ubuntu
  • 代码随想录算法训练营第三十八天| 322. 零钱兑换 279.完全平方数 139.单词拆分
  • javaSE.类型擦除机制
  • k8s教程3:Kubernetes应用的部署和管理
  • Foundation Agent:深度赋能AI4DATA
  • 宿舍DIY迷你空调实施方案
  • 敏捷开发管理流程
  • Qt 创建QWidget的界面库(DLL)