c++重载(overload)和重写(override)的区别和虚函数

c++重载(overload)和重写(override)的区别和虚函数,第1张

overload是同一个函数名,根据参数的不同实现不同的功能。例子:

void add(int a, int b){

return a+b;

}

void add(float a, float b){

return a+b;

}

override就是你例子里的重写父类的函数,以实现virtual的功能,基类的指针根据具体带入对象可以调用子类的virtual函数

virtual函数的意义是你用基类的指针去引用子类的对象时,可以调用子类的函数,这点普通函数是不行的。

A p=new B();

p->normal_func() //将调用基类的定义

p->virtual_func() //将调用子类的定义

至于你的例子里面为什么能带入char类型,我估计是想展示overload的用法,但是代码里面没有写出来

virtual 关键字是将函数声明为虚函数,定义他为虚函数是为了允许用基类的指针来调用子类的这个函数

override关键字是将函数声明为重载的函数

这段代码的结果是"other vshow"

SomeClass someObj = (SomeClass)otherObj;//这一句是将子类的指针强转为基类指针

someObjvshow();//虽然说用基类指针调用了vshow函数,但却执行了子类的vshow函数,这就virtual 关键字的作用,这就是虚函数的多态;

常见的不不能声明为虚函数的有:普通函数(非成员函数);静态成员函数;内联成员函数;构造函数;友元函数。这个原因很简单,主要是从语义上考虑,所以不支持。因为构造函数本来就是为了明确初始化对象成员才产生的,然而virtual function主要是为了再不完全了解细节的情况下也能正确处理对象。另外,virtual函数是在不同类型的对象产生不同的动作,现在对象还没有产生,如何使用virtual函数来完成你想完成的动作。(这不就是典型的悖论)其实很简单,那内联函数就是为了在代码中直接展开,减少函数调用花费的代价,虚函数是为了在继承后对象能够准确的执行自己的动作,这是不可能统一的。(再说了,这也很简单,静态成员函数对于每个类来说只有一份代码,所有的对象都共享这一份代码,他不归某个具体对象所有,所以他也没有要动态邦定的必要性。因为C++不支持友元函数的继承,对于没有继承特性的函数没有虚函数的说法。

你定义了一个virtual的函数,那么在别的地方就可以对它进行重写,即用override,例如:

public class Option

{

private double _a = 0;

private double _b = 0;

public double A

{

get { return _a; }

set { _a = value; }

}

public double B

{

get { return _b; }

set { _b = value; }

}

public virtual double GetResult()//定义虚函数;

{

double result = 0;

return result;

}

}

public class OptionAdd : Option

{

public override double GetResult() //重写

{

double result = 0;

result = A + B;

return result;

}

}

public class OptionSub : Option

{

public override double GetResult() //重写

{

double result = 0;

result = A - B;

return result;

}

}

Option obj1=new OptionAdd ();

obj1GetResult();//这里调用的是第一个重写后的加法运算;

Option obj2=new OptionSub ();

obj2GetResult();//这里调用的是第二个重写后的减法运算;

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/12157800.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存