C++与virtual = 0的区别; 和空功能

Afo*_*oto 9 c++ oop methods class

我现在正在学习C++,OO方面,我总是这样做:

class SomeClass{
   virtual void aMethod()=0;
}

class AnotherClass{
   void anotherMethod(){/*Empty*/}
}

class SomeClassSon : public SomeClass{
   void aMethod(){/*Also Empty*/}
}
Run Code Online (Sandbox Code Playgroud)

我的疑问是:3种方法之间有什么区别.虚拟等于零,空虚,虚拟,因为它是继承的,空的.

为什么我不能像父亲一样制作SomeClassSon方法?(虚拟空白等于零?)

kir*_*off 12

为您

class SomeClass{
   virtual void aMethod()=0;
}
Run Code Online (Sandbox Code Playgroud)

纯虚方法的存在使您的类抽象化.一旦你有一个这样的纯虚方法,=0在你的类中,你就无法实例化该类.更重要的是,任何派生类都必须实现纯虚拟aMethod(),或者它也成为抽象类.

在派生类中,您从上面覆盖纯虚方法,这使得派生类不是抽象的.您可以实例化此派生类.

但是,在派生类中,方法的主体是空的,对吗?这就是为什么你的问题有道理的原因:为什么不让这个类纯粹是虚拟的.那么,你的班级可能需要其他方法.如果是这样,SomeClass则无法实例化(有一个纯虚方法),而子类SomeClassSon可以.

同样适用于您AnotherClass,可以实例化,与之相反SomeClass.


Cha*_*via 6

不同之处在于它virtual void aMethod() = 0是一个虚函数,意思是:

  1. SomeClass 成为一个抽象基类,意味着它无法实例化.
  2. 任何继承自的类SomeClass必须实现aMethod,否则它也会成为无法实例化的抽象基类

请注意,具有一个或多个纯虚函数的任何类都自动为抽象基类.