
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();//这里调用的是第二个重写后的减法运算;
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)