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