首页 > 其他分享 >虚函数

虚函数

时间:2024-07-18 15:53:34浏览次数:12  
标签:函数 int 子类 virtual 纯虚 基类

多态(polymorphism)是面向对象编程语言的一大特点,而虚函数是实现多态的机制。其核心理念就是通过基类访问派生类定义的函数。多态性使得程序调用的函数是在运行时动态确定的,而不是在编译时静态确定的。使用一个基类类型的指针或者引用,来指向子类对象,进而调用由子类复写的个性化的虚函数,这是C++实现多态性的一个最经典的场景。

虚函数,在类成员方法的声明(不是定义)语句前加“virtual”, 如 virtual void func()
纯虚函数,在虚函数后加“=0”,如 virtual void func()=0
对于虚函数,子类可以(也可以不)重新定义基类的虚函数,该行为称之为复写Override。
对于纯虚函数,子类必须提供纯虚函数的个性化实现。
在派生子类中对虚函数和纯虚函数的个性化实现,都体现了“多态”特性。但区别是:

子类如果不提供虚函数的实现,将会自动调用基类的缺省虚函数实现,作为备选方案;
子类如果不提供纯虚函数的实现,编译将会失败。尽管在基类中可以给出纯虚函数的实现,但无法通过指向子类对象的基类类型指针来调用该纯虚函数,也即不能作为子类相应纯虚函数的备选方案。(纯虚函数在基类中的实现跟多态性无关,它只是提供了一种语法上的便利,在变化多端的应用场景中留有后路。)

class Shape {
   protected:
      int width, height;
   public:
      Shape( int a=0, int b=0)
      {
         width = a;
         height = b;
      }
      // pure virtual function
      virtual int area() = 0;//纯虚函数,必须在子类中复写
};

标签:函数,int,子类,virtual,纯虚,基类
From: https://www.cnblogs.com/checha/p/18309718

相关文章

  • 三角函数
    三角函数学习笔记三角形标准记号三角函数的定义正弦$$\sin(α)=\frac{对边}{斜边}=\frac{a}{c}$$余弦$$\cos(α)=\frac{邻边}{斜边}=\frac{b}{c}$$正切$$\tan(α)=\frac{对边}{邻边}=\frac{a}{b}$$余切$$\cot(α)=\frac{邻边}{对边}=\frac{b}{a}$$正......
  • 母函数与高斯和
    前置知识:单位根(为了偷懒,基本将所有的\(\omega\)都写成了\(w\))CP1我们很经常遇到的一个问题是\(xy~mod~n\)的求解,母函数在处理这样的一些问题时会有效(更优先的是寻求\(xy\)的性质或者利用带余除法)例1设\(p>2\)是素数,\(p\nmidabcd\),满足\(\{\frac{ra}p\}+\{\frac......
  • PSINS工具箱函数介绍——gpsplot
    介绍gpsplot函数的原理和作用程序源码functiongpsplot(vpGPS,ts)%GPSplot.%%Prototype:gpsplot(vpGPS,ts)%Inputs:vpGPS-[vnGPS,posGPS,tag,t]or[posGPS,tag,t]%thetagcolumnmaynotexist.%ts-GPSsamplinginterva......
  • Python数据可视化之numpy的11个常用的创建数组的函数
    numpy库在处理成千上万的数据时,Python的1维列表已经不适合来对数据进行处理,效率会很慢,所以numpy就诞生了,他可以将列表变成数组,而数组可以是1维、2维、3维甚至更高纬度,可用于存储和处理大型的矩阵,此外numpy提供了大量的数学函数,包括数学、逻辑、形态操作、排序、选择,输出和......
  • R语言,raster包——resample函数
    R报错: ErrorincompareRaster(rasters):differentextent解决方案:重采样library(raster)#设置文件路径reference_tif_path<-"path/to/reference.tif"input_folder_path<-"path/to/input/folder"output_folder_path<-"path/to/output/f......
  • PHP高性能递归函数
    一个递归方法functionorganizeRecords($regions){$organizedRegions=[];foreach($regionsas$region){$organizedRegions[$region['id']]=$region;$organizedRegions[$region['id']]['chi......
  • mysql函数使用总结
    计算视频的完播率:https://www.nowcoder.com/discuss/353150021023506432?urlSource=sitemapSELECTvideo_id,ROUND((100*comp_play_rate+5*like_cnt+3*comment_cnt+2*retweet_cnt)/(TIMESTAMPDIFF(DAY,recently_end_date,cur_date)+1),0)ashot_indexFR......
  • 全面分析构造函数(2)
        接上一篇文章,上一篇文章介绍了类的四种构造函数:无参、有参、拷贝、移动,这篇文章介绍其他的一些重要内容,如果有错误或遗漏,请大家批评指正。初始化参数列表    初始化参数列表是是有参构造的一种,它可以直接初始化对象的属性,而不是给对象的属性赋值。......
  • 数论函数的计算
    数论函数:\(f:\Z^*\rightarrowC\)积性函数:对任意\((m,n)=1\)满足\(f(mn)=f(m)f(n)\)的函数完全积性函数:对任意\(m,n\)满足\(f(mn)=f(m)f(n)\)的函数数论卷积:\(f*g(n)=\sum\limits_{d\midn}f(d)g(\fracnd)\)特别地,\(\tau=1*1,\sigma=1*id\)积性函数的数论卷积是......
  • 七、python函数基础
    文章目录学习目标一、函数的介绍二、函数的参数三、函数的返回值四、函数的注释五、函数调用函数六、函数高级6.1全局变量和局部变量6.2函数多个返回值6.3默认参数的使用6.4可变参数的使用6.5可变数据类型和不可变数据类型6.6函数的注意事项......