考虑从基础结构Triangle
继承的两个几何形状Line
和Geometry
。派生的结构继承了虚函数get_area()
,因此Triangle
通常可以计算面积,但是Line
应该给出错误,指示get_area()
与Line
不相关。当显示错误时,我想知道哪个结构称为get_area()
和位置(行号),最后终止程序。错误是在编译时还是在运行时显示都没有关系。我该怎么办?
struct Geometry
{
virtual double get_area() = 0;
};
struct Triangle: Geometry
{
double get_area() override {/* some code. */}
};
struct Line: Geometry
{
double get_area() override {/* give error. */}
};
最佳答案
尽管Joachim Pileborg解释了缺陷,但假设您保留当前的设计:
该方法的可能实现是:
double Triangle::get_area() override
{
assert(false);
return 0.;
}
动机:
在 Debug模式下,如果条件为false,
assert(condition);
将退出程序。假设您拥有IDE和调试器,那么您将能够看到谁调用了该方法。但是,在常规发行版本中,断言被停用。
return 0.;
确保返回有意义的内容。(注意:这可能会因您使用面积值而改变。NAN可能是一个不错的选择)。
笔记:
关于c++ - 提供虚函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39144054/