overload、overwrite、override
1、重载 overload
函数名一样,参数不同(类型、顺序,c++类中还有const函数,与返回值类型无关),重载的函数在同一个作用域(同一个类或在同一cpp文件中)
class A
{
public:
void test() {}
void test(int n) {}
void test() const {}
int test(int m) { return ;} // error,和上一个函数参数相同,非法的重载
};
2、覆盖 override
派生类与基类函数同名,参数相同,且基类函数由virtual修饰,覆盖就是常说的虚函数
class A
{
public:
virtual void test() {}
void test(int n) {}
}; class B : public A
{
public:
void test() {} // override
}; B b;
b.test(); // 调用B中的test
b.test(); // error
b.A::test(); // right 调用被隐藏的基类函数 B *b2= new B() ;
dynamic_cast<A*>(b2)->test(); // 调用B中的test
3、重写 overwrite
派生类与基类函数同名,则屏蔽基类函数(虚函数除外,即当基类函数与派生类函数参数相同,且基类为虚函数时,则为覆盖)
此种情况应避免,按照c++设计思想,基类非virtual函数,子类是不需要修改的
class A
{
public:
void test() {}
void test(int n) {}
}; class B : public A
{
public:
void test() {} // overwrite
}; B b;
b.test(); // 只能调用B的test函数
static_cast<A>(b).test(); // 调用A的test函数
b.test();// error 基类同名函数被屏蔽了 B *b2= new B() ;
dynamic_cast<A*>(b2)->test(); // 调用A中的test
overload、overwrite、override的更多相关文章
- c++中的overload、overwrite、override
作为初学者,本文只从语法和简单的使用角度对overload.overwrite.override进行了区分,不曾涉及原理,记录下来以供查阅. 1.verload(重载) 1.1 基本要求: c++中的 ...
- C++中重载(overload)、覆盖(override)与隐藏(oversee)
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- php 面向对象的三大要素(封装、继承、多态)以及重写(override)和重载(overload)的举例说明
PHP是一种HTML内嵌式的,用来制作动态网页的服务器端的脚本语言.其特点是:开发周期短,稳定安全,简单易学,免费开源,良好的跨平台特性.PHP是一种面向对象的程序设计语言,目前已成为全球最受欢迎的五 ...
- Interview Question Overload、Refactoring和Override?
Overload Overload我们百度翻译知道是超载的意思,不过我们一般称其为重载,在这里我们不纠结于它的翻译,我们来讲讲重载是什么意思,重载的好处.在下面我们以Overload来代表重载(为了记 ...
- java方法重载(overload)、重写(override);this、super关键简介
一.方法重载: 条件:必须在一个类中,方法名称相同,参数列表不同(包括:数据类型.顺序.个数),典型案例构 造方重载. 注意:与返回值无关 二.方法重写: 条件: (1)继承某个类或实现某接口 (2 ...
- sealed、new、virtual、abstract与override 趣解
1. sealed——“断子绝孙” 密封类不能被继承.密封方法可以重写基类中的方法,但其本身不能在任何派生类中进一步重写.当应用于 方法或属性时,sealed修饰符必须始终与override一起使用. ...
- Java注释Override、Deprecated、SuppressWarnings详解
一.什么是注释 说起注释,得先提一提什么是元数据(metadata).所谓元数据就是数据的数据.也就是说,元数据是描述数据的.就象数据表中的字段一样,每个字段描述了这个字段下的数据的含义.而J2SE5 ...
- C#基础知识系列七(base、this、new、override、abstract、virtual、static)
前言 本文主要来讲解一下C#中,自己觉得掌握的不怎么样或者用的不多,不太熟悉的关键字,主要包括base.this.new.override.abstract.virtual以及针对static字段和s ...
- [C#] 區分 abstract、virtual、override 和 new
abstract.virtual.override和new是在類別的繼承關係中常用的四個修飾方法的關鍵字,在此略作總結. 1. 常用的中文名稱: n abstract => 抽象方法. n ...
随机推荐
- [LeetCode] Unique Substrings in Wraparound String 封装字符串中的独特子字符串
Consider the string s to be the infinite wraparound string of "abcdefghijklmnopqrstuvwxyz" ...
- [LeetCode] Longest Increasing Subsequence 最长递增子序列
Given an unsorted array of integers, find the length of longest increasing subsequence. For example, ...
- [LeetCode] Implement Queue using Stacks 用栈来实现队列
Implement the following operations of a queue using stacks. push(x) -- Push element x to the back of ...
- C++知识回顾(二)——名称空间
随着工程的增大,名称相互冲突的肯能性增加,使用多个厂商的类库时,可能导致名称冲突.为了解决这些问题,需要用到名称空间. 为了将代码加入名称空间,可以使用namespae将其包含,例如,编写一段代码,其 ...
- mysql的explain学习
explain是用来获取sql执行计划的信息. 上面是一个最简单的sql分析.下面来分析每列的意思. ①id ②select_type ③ table ④type ⑤possible_key ⑥ke ...
- FFT 快速傅里叶变换浅析
终于补完坑了哈哈哈 这个东西很神奇,看了半天网上的解释和课件,研究了很长时间,算是大概明白了它的原理. 话不多说先上图. 我们要求的h(x)=f(x)*g(x),f(x)=Σai*x^i,g(x)=Σ ...
- Redis集群研究和实践(基于redis 3.0.5)
前言 redis 是我们目前大规模使用的缓存中间件,由于它强大高效而又便捷的功能,得到了广泛的使用.现在的2.x的稳定版本是2.8.19,也是我们项目中普遍用到的版本. redis在年初发布了3.0. ...
- Linux--Tail命令
inux tail命令用途是依照要求将指定的文件的最后部分输出到标准设备,通常是终端,通俗讲来,就是把某个档案文件的最后几行显示到终端上,假设该档案有更新,tail会自己主动刷新,确保你看到最新的档案 ...
- dede织梦批量导入关键词
在后台替换对应的文件件即可. 注意:如果你的关键字长度超过16个字符的话,需要更改 dede 中 keywords 表中的keyword 字段字符长度 article_keywords_main.ph ...
- JS中class和id的区别
class和id的区别 class用于css的,id用于js的. 1)class页面上可以重复.id页面上唯一,不能重复. 2)一个标签可以有多个class,用空格隔开.但是id只能有id.