首页 > 编程语言 >C++多态

C++多态

时间:2023-04-04 19:37:11浏览次数:33  
标签:Polymorphism 函数 子类 多态 C++ 父类

多态是C++面向对象最主要的特性之一,多态即多种形态,多个不同对象对同一事物会产生不同状态

多态的实现

1.虚函数重写

  实现多态的必要条件是虚函数,父类中有虚函数,子类重写虚函数,实现同一对象的不同表达方式。

2.多态的要求

   (1、被调用的函数必须是虚函数,子类对父类的虚函数进行重写 (重写:三同(函数名/参数/返回值)+虚函数)
   (2、父类指针或者引用去调用虚函数。

  个人理解:c++中父类指针可以指向子类对象(子类指针不可以指向父类成员,因为父类成员没有子类特有的成员函数,可能会导致出错),通过将子类对象赋予父类的方法使得父类指针

  可以去调用子类的虚成员函数。在函数中形参使用父类的指针或引用,从而实现多态的效果。(即各种子类成员均可成为形参,而使得同一函数返回不同结果)

C++ 多态分类及实现:

  重载多态(Ad-hoc Polymorphism,编译期):函数重载、运算符重载

  

class A
{
public:
    void do(int a);
    void do(int a, int b);
};

 

  子类型多态(Subtype Polymorphism,运行期):虚函数

  参数多态性(Parametric Polymorphism,编译期):类模板、函数模板

  强制多态(Coercion Polymorphism,编译期/运行期):基本类型转换、自定义类型转换

 

参考文章https://interview.huihut.com/#/?id=%e5%a4%9a%e6%80%81

标签:Polymorphism,函数,子类,多态,C++,父类
From: https://www.cnblogs.com/Explosion556/p/17287671.html

相关文章

  • VsCode安装和配置c/c++环境
    vscode是代码编译器,同时它提供了许多插件,可以帮助你方便的编写代码。通过配置vscode的开发环境,可以实现多种语言编译。总而言之,装了一个vscode就相当于装了多个IDE(集成开发环境)。后面,我们编写C语言代码就要依靠vscode了。一、下载vscode网址:VisualStudioCode-CodeEditing.......
  • C++实现AES加密
    参考https://zhuanlan.zhihu.com/p/567141666本人开发环境:vs2022,平台工具集vs2015(v140)要做到的如下图需要下载Cryptopp库https://github.com/weidai11/cryptopp打开默认工程,生成即可,选择cryptlib项目点击生成,产生头文件和lib文件实现代码:#include<Cryptopp/aes.h>#i......
  • 【C++学习笔记】关于const int* 、 int const * 、 int* const
    constint*、intconst*、int*const的关键点在于const与*的位置,而const与类型int的位置无关,可以随意调换,属于个人代码风格,不过建议写成constint*,方便直观。constint*与int*const的区别在于const修饰的是int*还是变量,其中constint*a修饰的是int*,表示这个......
  • c++vector怎么用
    ANSWERC++中的vector是一个能够存放任意类型的动态数组,能够增加和压缩数据,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。以下是使用vector的详细步骤和注意事项:头文件在使用vector时,需要包含vector头文件include初始化如果vector的元素类型是int,默认初始......
  • c++ 数字和string 类型的相互转换
    C++数字和string类型的相互转换数字转为string1.std::to_string()函数//Definedinheader<string>std::stringto_string(intvalue);//(sinceC++11)std::stringto_string(longvalue);//(sinceC++11)std::stringto_str......
  • C++奥赛一本通贪心题解
    C++奥赛一本通刷题记录(贪心)2017.11.15Bygwj1139177410书不见了,占坑待填。AnEasyProblempoj2453//贪心,将最右边第一个01改成10并将其右边的1都往右移到最低位#include<iostream>usingnamespacestd;intmain(){unsignedintn,x;while(cin>>n&&n){......
  • C++,OpenCV图形基础(2)
    图像基础颜色通道RGB图像有4个默认通道:红色、绿色和蓝色各有一个通道,以及一个用于编辑图像复合通道(主通道)彩色深度8位色,每个像素所能显示的彩色数为2的8次方,即256种颜色。16位增强色,16位彩色,每个像素所能显示的彩色数为2的16次方,即65536种颜色。24位真彩色,每个像素所能显示的彩色......
  • C++统计写过的代码行数
    一、获得数据1、备份到XML2、改为txt2、进行统计#include<iostream>#include<string>usingnamespacestd;intmain(){ freopen("just.txt","r",stdin); strings; getline(cin,s); intflag=0;longlongcount=0; while(s!="gwj49491649......
  • 神奇的泛型与多态
    今天做leetcode的时候发现泛型类有报错,方法要返回List<List<Integer>>result  List<List<Integer>>result=newArrayList<ArrayList<Integer>>();里面的泛型无法转换正常转换。。要因为左边是接口,右边是实现类,说明泛型不能多态。。。要写成一样的才行。  或者右边......
  • 2023蓝桥杯省赛C/C++组备赛
    一、简单计算与模拟1.成绩统计#include<bits/stdc++.h>usingnamespacestd;intn;intmain(){ doublepoint; doublejige=0,youxiu=0; cin>>n; for(inti=0;i<n;++i){ cin>>point; if(point>=60){ jige++; if(point&......