据我所知,在虚函数的情况下,使用co-variant类型的返回值可能会有所不同。我希望知道是否有可能的方式我可以通过它在我的基类的虚函数中有一个空声明而没有返回NULL 但仍然没有这个:
错误:函数返回非空
时没有返回语句我不希望使用纯虚函数,因为它会使用虚函数的空声明来混乱所有派生类。
有没有其他方法解决这个问题?
答案 0 :(得分:2)
如果它们是一种可能的方式,我可以通过它在我的基类的虚函数中有一个空声明而不返回NULL但仍然没有[错误]
当然不是。如果你有一个被声明为返回一个值的函数,你为什么期望它能够定义它?如果函数是纯虚拟的,那么你不会“使用虚函数的空声明”来混乱所有派生类,你将它保持为纯虚拟,直到你有一个有意义的值返回(或使用NULL) 。如果有一个非抽象类,其中函数不能像声明所暗示的那样起作用是没有意义的:如果这是你的类的形成方式,你应该考虑从API中删除函数,重新考虑为什么你'反对NULL,或者反而抛出异常。
答案 1 :(得分:0)
所以你的基类函数必须返回一些值,并且类型必须与你将在派生类中使用的返回类型共同变化(这自然会让人想起基类指针和派生类-pointers)。
您的要求是您要避免传递NULL指针。一种可能性是创建一个特定的null object(某种对象表示缺少任何有意义的结果,而不是实际的NULL指针)
答案 2 :(得分:0)
我想你可以为基类型返回类型返回null object。
答案 3 :(得分:0)
根据C ++标准
2一个既没有表达式也没有braced-init-list的return语句 只能在不返回值的函数中使用,即a 函数返回类型为cv void,
和
离开函数末尾相当于没有返回 值;这会导致值返回时出现未定义的行为 功能
如果没有实现,我没有看到基类中的虚函数不能被声明为纯虚函数的原因。