Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我应该强制执行C++;运行时接口还是编译时接口?_C++_Oop - Fatal编程技术网

C++ 我应该强制执行C++;运行时接口还是编译时接口?

C++ 我应该强制执行C++;运行时接口还是编译时接口?,c++,oop,C++,Oop,我发现这一点: 如果getBufferPointer是纯虚拟的,任何未能实现它的派生类都将在编译时被捕获。为什么选择运行时错误而不是编译器触发的错误更好?只需将其设置为纯虚拟错误即可 virtual u8 * getBufferPointer() = 0; 因此,从其父类(PacketElement)派生的任何子类都应该重新定义它。只需将其设置为纯虚拟类即可 virtual u8 * getBufferPointer() = 0; 因此,从其父类(PacketElement)派生的任何子

我发现这一点:


如果
getBufferPointer
是纯虚拟的,任何未能实现它的派生类都将在编译时被捕获。为什么选择运行时错误而不是编译器触发的错误更好?

只需将其设置为纯虚拟错误即可

 virtual u8 * getBufferPointer() = 0;

因此,从其父类(PacketElement)派生的任何子类都应该重新定义它。

只需将其设置为纯虚拟类即可

 virtual u8 * getBufferPointer() = 0;

因此,从其父类(PacketElement)派生的任何子类都应该重新定义它。

人们永远不应该喜欢运行时错误而不是编译时错误,尤其是当语言提供了一种更简单的方法来精确执行您想要的操作时,这也会导致编译器错误。在我的C++代码的5多年里,我从来没有遇到过使用你的方法创建方法的原因。 运行时错误=许多可能的原因,我需要自己的调试语句来找到它。可能还需要多次运行该程序。在您的情况下,我可能有其他类无法重写该方法,这可能会在某些未定义的点上导致错误


编译时错误=一个原因,我的编译器会告诉我发生了什么。

人们永远不应该喜欢运行时错误而不是编译时错误,特别是当语言提供了一种更简单的方法来完成您想要的事情时,这也会导致编译器错误。在我的C++代码的5多年里,我从来没有遇到过使用你的方法创建方法的原因。 运行时错误=许多可能的原因,我需要自己的调试语句来找到它。可能还需要多次运行该程序。在您的情况下,我可能有其他类无法重写该方法,这可能会在某些未定义的点上导致错误



编译时错误=一个原因,我的编译器告诉我发生了什么。

Emmmm
virtualvoidoverride\u me()=0?使用抽象虚拟函数很容易。看起来他们提供了一个默认的行为,让你马上知道你必须做得更好。我不知道他们为什么选择这样做。@duffymo:现在我看到luk32的评论,我觉得这是一个愚蠢的问题。无论如何,在这种情况下,为什么在运行时导致错误更好?@duffymo似乎是反逻辑的,除非
netutil\u fatal
是某种编译时检查,这给出了一些解释。或者它被设计成“可绕过”。更有趣的问题是,IMO,nmap方法的优点是什么。如果您不希望基类是抽象的,nmap的版本可能是唯一的方法。这是我能想到的这种方法的唯一优点。注意,这里的情况并非如此,因为
PacketElement
类确实有一个纯虚方法…Emmmm
virtualvoidoverride_me()=0?使用抽象虚拟函数很容易。看起来他们提供了一个默认的行为,让你马上知道你必须做得更好。我不知道他们为什么选择这样做。@duffymo:现在我看到luk32的评论,我觉得这是一个愚蠢的问题。无论如何,在这种情况下,为什么在运行时导致错误更好?@duffymo似乎是反逻辑的,除非
netutil\u fatal
是某种编译时检查,这给出了一些解释。或者它被设计成“可绕过”。更有趣的问题是,IMO,nmap方法的优点是什么。如果您不希望基类是抽象的,nmap的版本可能是唯一的方法。这是我能想到的这种方法的唯一优点。请注意,这里的情况并非如此,因为
PacketElement
类确实有一个纯虚拟方法,@luk32在对答案的注释中已经回答了这个问题。问题的第二部分呢?对不起,我没有注意到更新。。我的网速太慢了:(而且@luk32非常快:)@d33tah;接下来是第二个问题:为什么导致运行时错误比由编译器触发的错误更好?这只是我的观点:编译时错误:它基本上涵盖了语法和类型检查等最基本的内容。这意味着它将检查程序运行的基本先决条件是否满足。运行时错误:对于抽象方法,在编译时,编译器无法通过解析语法来辨别谁在实际调用该抽象方法,这完全取决于客户端对程序的输入。因此,这将触发运行时错误。@d33tah您对他的第二个问题有任何评论,而@luk32在对答案的评论中已经回答了这个问题。问题的第二部分呢?对不起,我没有注意到更新。。我的网速太慢了:(而且@luk32非常快:)@d33tah;接下来是第二个问题:为什么导致运行时错误比由编译器触发的错误更好?这只是我的观点:编译时错误:它基本上涵盖了语法和类型检查等最基本的内容。这意味着它将检查程序运行的基本先决条件是否满足。运行时错误:在这种抽象方法的情况下,在编译时,编译器仅仅通过解析语法就无法判断谁在实际调用该抽象方法,这完全取决于客户端对程序的输入。因此它将触发运行时错误。@d33tah您对他的第二个问题有何评论