协慌网

登录 贡献 社区

抽象函数和虚函数有什么区别?

抽象函数和虚函数有什么区别?在哪些情况下建议使用虚拟或抽象?哪一个是最好的方法?

答案

抽象函数不具备功能。你基本上是在说,任何一个子类必须给出他们自己的这个方法的版本,但是它太普遍甚至不能尝试在父类中实现。

一个虚函数 ,基本上就是说看,这里的功能对于子类来说可能是也可能不够好。因此,如果它足够好,请使用此方法,如果没有,则覆盖我,并提供您自己的功能。

抽象函数没有实现,只能在抽象类上声明。这会强制派生类提供实现。虚函数提供默认实现,它可以存在于抽象类或非抽象类中。例如:

public abstract class myBase
{
    //If you derive from this class you must implement this method. notice we have no method body here either
    public abstract void YouMustImplement();

    //If you derive from this class you can change the behavior but are not required to
    public virtual void YouCanOverride()
    { 
    }
}

public class MyBase
{
   //This will not compile because you cannot have an abstract method in a non-abstract class
    public abstract void YouMustImplement();
}
  1. 只有abstract类才能有abstract成员。
  2. abstract类继承的非abstract必须 overrideabstract成员。
  3. abstract成员是隐式virtual
  4. abstract成员不能提供任何实现( abstract在某些语言中称为pure virtual )。