overload、overwrite、override

1、重载 overload

函数名一样,参数不同(类型、顺序,与返回值类型无关),重载的函数一般在同一个类中

class A
{
public:
  void test() {}
  void test(int n) {}
  int test(int m) { return 1;} // 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(2);    // error
b.A::test(2); // right 调用被隐藏的基类函数
class A
{
public:
  virtual void test() {}
  void test(int n) {}
};

class B : public A
{
public:
  void test() {}   // override
};

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函数dynamic_cast<A>b.test();b.test(3);// error 基类同名函数被屏蔽了
时间: 2024-10-06 08:40:30

overload、overwrite、override的相关文章

override(重写,覆盖) 1、方法名、参数、返回值相同。 2、子类方法不能缩小父类方法的访问权限。 3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。 4、存在于父类和子类之间。 5、方法被定义为final不能被重写。 overload(重载,过载) 1、参数类型、个数、顺序至少有一个不相同。 2、不能重载只有返回值不同的方法名。 3、存在于父类和子

override(重写,覆盖) 1.方法名.参数.返回值相同. 2.子类方法不能缩小父类方法的访问权限. 3.子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常). 4.存在于父类和子类之间. 5.方法被定义为final不能被重写. overload(重载,过载) 1.参数类型.个数.顺序至少有一个不相同.   2.不能重载只有返回值不同的方法名. 3.存在于父类和子类.同类中. 方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现. 重写(O

C++中重载(overload)、覆盖(override)与隐藏(oversee)

body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;} th{border: 1px solid gray; padding: 4px; background-color: #DDD;} td{border: 1px solid gray; padding: 4px;} tr:nth-child(

Interview Question Overload、Refactoring和Override?

Overload Overload我们百度翻译知道是超载的意思,不过我们一般称其为重载,在这里我们不纠结于它的翻译,我们来讲讲重载是什么意思,重载的好处.在下面我们以Overload来代表重载(为了记英语单词,你懂得). Overload是什么 Overload:顾名思义,就是Over(重新)--load(加载),所以中文名称是重载.它可以表现类的多态性,可以是函数里面可以有相同的函数名但是参数名.返回值.类型不能相同:或者说可以改变参数.类型.返回值但是函数名字依然不变. Overload的好

java方法重载(overload)、重写(override);this、super关键简介

一.方法重载: 条件:必须在一个类中,方法名称相同,参数列表不同(包括:数据类型.顺序.个数),典型案例构 造方重载.  注意:与返回值无关 二.方法重写: 条件: (1)继承某个类或实现某接口 (2)返回值类型相同.方法签名相同(方法名称+参数列表) 注意:(1)重写的方法不能比被重写方法有更严格的访问权限 (2)父类中的私有方法不能被重写 三.static关键字(静态的) 1.用来修饰成员变量.成员方法.还有 static代码块(局部变量不能用static来修饰) 2.修饰的成员变量.成员方

Objective-C-类(static)方法、实例方法、overwrite(覆写)、属性(property)复习

先来定义一个Human父类 定义部分: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // //  Human.h //  OOP // //  Created by jimmy.yang on 11-2-9. //  Copyright 2011 __MyCompanyName__. All rights reserved. // #import <Foundation/Foundation.h> @interface Human :

Java凝视Override、Deprecated、SuppressWarnings具体解释

一.什么是凝视 说起凝视,得先提一提什么是元数据(metadata).所谓元数据就是数据的数据.也就是说,元数据是描写叙述数据的.就象数据表中的字段一样,每一个字段描写叙述了这个字段下的数据的含义.而J2SE5.0中提供的凝视就是java源码的元数据,也就是说凝视是描写叙述java源码的.在J2SE5.0中能够自己定义凝视.使用时在@后面跟凝视的名字. 二.J2SE5.0中提前定义的凝视 在J2SE5.0的java.lang包中提前定义了三个凝视.它们是Override.Deprecated和S

Java注释Override、Deprecated、SuppressWarnings详解

http://blog.csdn.net/softwave/article/details/6991913 一.什么是注释 说起注释,得先提一提什么是元数据(metadata).所谓元数据就是数据的数据.也就是说,元数据是描述数据的.就象数据表中的字段一样,每个字段描述了这个字段下的数据的含义.而J2SE5.0中提供的注释就是java源代码的元数据,也就是说注释是描述java源代码的.在J2SE5.0中可以自定义注释.使用时在@后面跟注释的名字.                         

C#之Abstract、Vitrual、Override

Abstract abstract修饰符可以和类.方法.属性.索引器及事件一起使用.在类声明中使用 abstract修饰符以指示某个类只能是其他类的基类.标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现. 1.抽象类: 用它修饰的类称为抽象类,抽象类不能实例化. 抽象类中,包括抽象方法,还可以有抽象属性.(抽象属性也必须改写.) 非抽象类从抽象类中派生,必须通过改写来实现所有继承而来的抽象方法. 如果一个类,从抽象类中派生,但是没有对抽象类中的方法进行实现的话,那么这个类必须是抽象

sealed、new、virtual、abstract与override 总结

原文地址:http://www.cnblogs.com/DebugLZQ/archive/2011/08/09/2132468.html 1. sealed--"断子绝孙" 密封类不能被继承.密封方法可以重写基类中的方法,但其本身不能在任何派生类中进一步重写.当应用于方法或属性时,sealed修饰符必须始终与override一起使用. 即:密封类不会有子类,所以是"断子绝孙". 2. new--"你是我的,我是我的" new关键字用于显式隐藏从基