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

C++---多态

一、基本用法

1.多态的必要条件:

①必须是基类的指针或者引用调用虚函数

②被调用的函数必须是虚函数,并且完成了虚函数的重写

2.重写

子类中有跟基类中的虚函数完全相同的虚函数(返回值,函数名,参数类型)

3.代码演示

class Person
{
public:virtual void func(){}//基类中只需要声明不需要实现,因为多态就是基类的声明+子类的实现
};
class Student : public Person
{
public:virtual void func(){cout << "子1" << endl;}
};
class Teacher : public Person
{
public:virtual void func(){cout << "子2" << endl;}
};
void Func(Person* ptr)
{ptr->func();
}
int main()
{Person ps;Student st;Teacher th;Func(&ps);Func(&st);//输出"子1"Func(&th);//输出"子2"
}

4.一个选择题

class A
{
public:virtual void func(int val = 1) { cout << "A->" << val << endl; }virtual void test() { func(); }
};
class B : public A
{
public:void func(int val = 0) { cout << "B->" << val << endl; }
};
int main()
{B* p = new B;p->test();return 0;
}

输出结果是多少?

p调用test,然后调用func,使用A的声明B的实现。B->1

二、析构函数的重写

析构函数函数名不同也构成重写

class A
{
public:virtual ~A(){cout << "A()" << endl;}
};
class B : public A
{
public:~B(){cout << "~B()->delete:" << _p << endl;}
protected:int* _p = new int[10];
};
int main()
{A* p1 = new A;A* p2 = new B;delete p1;delete p2;return 0;
}

三、关键字

1.override

加在虚函数后边可以自动检查是否有错误导致无法构成重写

函数名错误自动检查出来

2.final

①写在类名后边不可被继承

②加在虚函数后边无法被重写

四、纯虚函数和抽象类

在虚函数后边写上=0,这个函数就是纯虚函数,不需要实现,抽象类无法实例化出对象,作用是是强制派生类重写虚函数

class Car
{
public:virtual void Drive() = 0;
};
class Benz : public Car
{
public:virtual void Drive(){cout << "Benz-舒适" << endl;}
};
class BMW : public Car
{
public:virtual void Drive(){cout << "BMW-操控" << endl;}
};
int main()
{//Car car;//纯虚函数无法实例化抽象类/Car* pBenz = new Benz;pBenz->Drive();Car* pBMW = new BMW;pBMW->Drive();return 0;
}

http://www.dtcms.com/a/272184.html

相关文章:

  • Camera2API笔记
  • Unity WebGL文本输入
  • centos7 安装jenkins
  • jenkins部署springboot项目
  • 抽象类与接口:Java面向对象设计的两大支柱
  • 表达式索引海外云持久化实践:关键技术解析与性能优化
  • Spring Boot 整合 RabbitMQ
  • 【前端】接口日志追踪
  • 06.消息传递网络
  • 「日拱一码」023 机器学习——超参数优化
  • 判断当前是否为钉钉环境
  • 【Pandas】pandas DataFrame from_dict
  • 1.2.3_1 OSI参考模型
  • STM32F103C8T6单片机内部执行原理及启动流程详解
  • vue3实现pdf文件预览 - vue-pdf-embed
  • 力扣热门算法题 127.单词接龙,128.最长连续序列,130.被围绕的区域
  • MySQL数据库基础教程:从安装到数据操作
  • 快速合并多个CAD图形为单一PDF文档的方法
  • 常见 Docker 错误及解决方法
  • (vue)前端区分接口返回两种格式,一种Blob二进制字节流,一种常规JSON,且将blob响应转为json
  • 基于Catboost算法的茶叶数据分析及价格预测系统的设计与实现
  • 多元函数的切平面与线性近似:几何直观与计算方法
  • 高数附录(1)—常用平面图形
  • 《O-PAS™标准的安全方法》白皮书:为工业自动化系统筑起安全防线
  • msf复现永恒之蓝
  • 每日一SQL 【各赛事的用户注册率】
  • Datawhale AI 夏令营:基于带货视频评论的用户洞察挑战赛 Notebook(下篇)
  • 流媒体服务
  • SIMATIC S7-1200的以太网通信能力:协议与资源详细解析
  • x86架构CPU市场格局