为什么我们需要c ++中的接口或纯虚函数

时间:2016-10-06 14:03:19

标签: c++

为什么我们需要在c ++中使用接口(纯虚函数或抽象类)? 我们可以在其中定义具有虚函数的基类,并在派生类中重写该虚函数,而不是使用抽象类。 上述方法的优点和缺点是什么(除了我们可以创建基类的对象)?

3 个答案:

答案 0 :(得分:12)

纯虚函数适用于在基类中实现函数的合理方法。例如:

try {
    Authenticate.Auth("358607051299527","1122");
} catch (TimeoutException e) {
    e.printStackTrace();
}
Log.e("as","Prefrences Saved");
Log.e("as","My final result = "+Authenticate.finalresult.toString());

您可以使用针对这些形状的特定公式编写实现class Shape { public: virtual float area() const = 0; }; 的{​​{1}}和Circle等派生类。但是如果它不是纯虚拟的话,你会如何在Rectangle本身实现area()?如何计算形状的面积,甚至不知道它是什么样的形状?

如果您的函数可以在基类中实现(以有用的方式),那么继续执行它。并非所有基类都需要抽象。但其中一些只是 抽象,如area()

答案 1 :(得分:2)

纯虚函数是告诉类的用户他们不能自己使用该类而不继承它的方法。

显然,你可以做你所描述的,系统将按预期编译和工作。但是,纯虚函数不是编译器的构造;这是为了阅读你的代码的人。通过这种结构,您可以告诉读者您的代码必须继承自您的类,因为该类不是设计为自己实例化的。

在没有合理的函数默认实现的情况下,您可以使用纯虚函数。这告诉实现您的类的人他们必须提供某些功能,并且编译器帮助他们在忘记提供实现时检测情况。

另一方面,如果您为应由子类实现的虚函数提供默认实现,然后类库的用户忘记提供实现,则在运行之前不会检测到问题 - 时间。

答案 2 :(得分:2)

  

界面使您能够指定一组行为   所有实现该接口的类都将共享。   因此,我们可以定义变量和集合(例如数组)   那些不必事先知道他们是什么样的具体对象   将持有,只有他们将持有实现的对象   接口

Here

  

正如其他人所说,界面是实施某些方法,属性和事件的契约义务[...]这是证明该特征合理的一个非常好的好处。

here

(请参阅这些非常好的解释)