C++ 重写重载重定义区别

C++ 重写重载重定义区别

(源自:http://blog.163.com/[email protected]/blog/static/111352259201102441934870/)

1 成员函数重载特征:
   a 相同的范围(在同一个类中)

b
函数名字相同

c
参数不同

d
virtual关键字可有可无

2
重写(覆盖)是指派生类函数覆盖基类函数,特征是:

a
不同的范围,分别位于基类和派生类中

b
函数的名字相同

c
参数相同

d
基类函数必须有virtual关键字

3
重定义(隐藏)是指派生类的函数屏蔽了与其同名的基类函数,规则如下:

a
如果派生类的函数和基类的函数同名,但是参数不同,此时,不管有无virtual,基类的函数被隐藏。

b
如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有vitual关键字,此时,基类的函数被隐藏。

时间: 2024-08-07 17:00:56

C++ 重写重载重定义区别的相关文章

重载重写重定义

1.重载:overload,是指同一可访问区内被声明的几个具有不同参数列表(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型. class Overload{ public: void V1(int i); void V1(double i); void V1(int i, double j); void V1(double i, int j); int test(int i); //编译报错,不是重载 }; 2.隐藏(重定义):隐藏是指派生类的函数屏

C++基础6 【继承】 类型兼容 satatic 多继承 虚继承 【多态】 案例 虚析构函数 重载重写重定义

[继承] 继承的访问控制域 图 类型兼容性原则  指针 与 引用 用子类直接初始化父类 类的继承模型示意 图 [继承结论] [非常重要的概念] 继承与组合混搭情况下,构造和析构调用原则 原则:先构造父类,再构造成员变量.最后构造自己 先析构自己,在析构成员变量.最后析构父类 继承中,同名的成员变量的处理办法 继承中,同名的成员函数的处理办法 派生类中的static关键字 如果静态成员变量,你没有使用,也没有初始化的话 编译不会报错 经典错误 : 类中函数默认是private的,无法在外部访问 具

重写和重载的区别

(1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 重载Overloading是一个类中多态性的一种表现. (2) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义. 调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性. (3) 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同.无法以返回型别作为重载函数的区分标准. 下

c#隐藏和重写基类方法的区别

c#隐藏和重写基类方法的区别 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace interfaceInfo { public class animal { public void action() { Console.WriteLine("eat sleep fuck"); } public virtual void show() { Conso

重载,继承,重写和多态的区别

重载,继承,重写和多态的区别 重载,继承,重写和多态的区别: 1)继承是子类获得父类的成员, 2)重写是继承后重新实现父类的方法. 3)重载是在一个类里一系列参数不同名字相同的方法. 4)多态则是为了避免在父类里大量重载引起代码臃肿且难于维护. 网上看到一个有趣的说法是:继承是子类使用父类的方法,而多态则是父类使用子类的方法. 下面的例子包含了这四种实现: class Triangle extends Shape { public int getSides() {  return 3; }} c

Objective-C学习笔记(二十二)——初始化方法init的重写与自己定义

初学OC.对init这种方法不是非常了解.我们如今来分别对init方法进行重写以及自己定义,来加深对他的了解. 本样例也是用Person类来进行測试. (一)重写init方法. (1)在Person.h中声明init方法: -(instancetype)init; (2)在Person.m中声明成员变量.以及写一个打印成员变量的函数,而且重写init初始化方法:在重写的方法中.对成员变量进行了赋值.注意,这个init方法是无參数的方法. { NSString *_peopleName; int

java 重写和重载的区别

重写:重写是子类的方法覆盖父类的方法,有两个重要特点 1.子类方法名和参数类型.个数必须和父类一样. 2.如果有返回值,则返回值类型也必须和父类一样. 1 //父类 2 public class Bird(){ 3 public String getInfo(){ 4 return "父类中的getInfo方法": 5 } 6 } 7 8 //子类重写父类的getInfo方法 9 10 public class Littlebird extends Bird{ 11 @Override

C#中的重写和覆盖的区别

#中重写(override)和覆盖(new)的区别 重写用关键字 virtual 修饰的方法,叫虚方法.可以在子类中用override 声明同名的方法,这叫“重写”.相应的没有用virtual修饰的方法,我们叫它实方法.重写会改变父类方法的功能.看下面演示代码:#region 重写 public class C1{    public virtual string GetName()    {        return "徐明祥";    }} public class C2 : C

方法的重写与重载的区别(Override与Overload)。重载的方法是否可以改变返回值的类型

方法的重写(Override)与重载(Overload)的区别.重载的方法是否可以改变返回值的类型?[基础] 解释: 方法的重写overriding和重载Overloading是Java多态性的不同表现. 1.重写overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现. 2.如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding). 子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"