Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.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++ - Fatal编程技术网

C++ c+中实方法与虚方法的区别+;

C++ c+中实方法与虚方法的区别+;,c++,C++,我在维基百科上读过这些定义,但我想用简单的英语理解它们,这些是我在维基百科上读到的定义 虚拟函数或虚拟方法是一种函数或方法,其行为可以由具有相同签名的函数在继承类中重写” “一个纯虚函数或纯虚方法是一个虚函数,需要由非抽象的派生类实现” 我的另一个问题是,如果我有a类和B类,如何在a类或仅在B类中执行虚拟方法…我读了很多书,我知道有人说这可能与这里的一些问题重复,但我真的想用简单的英语理解,因为这就是我如何更容易更快地了解事物的原因。基类的非虚拟方法不能被继承自它的子类重写。(注意,这与在子类中

我在维基百科上读过这些定义,但我想用简单的英语理解它们,这些是我在维基百科上读到的定义

虚拟函数
虚拟方法
是一种
函数
方法
,其行为可以由具有相同签名的函数在继承类中重写”

“一个
纯虚函数
纯虚方法
是一个
虚函数
,需要由非抽象的派生类实现”


我的另一个问题是,如果我有
a类
B类
,如何在
a类
或仅在
B类
中执行
虚拟方法
…我读了很多书,我知道有人说这可能与这里的一些问题重复,但我真的想用简单的英语理解,因为这就是我如何更容易更快地了解事物的原因。

基类的非虚拟方法不能被继承自它的子类重写。(注意,这与在子类中“重新定义”方法不同)

基类的虚拟方法可以被子类覆盖。(参见@juanchopanza关于
private
visibility的评论)


基类中的纯虚拟方法意味着它是一个“抽象”(仅将其视为一个接口)-因为它不应该直接按原样使用,而是基类希望子类重写该方法以提供实际实现。

您不理解定义的哪一部分?是“重写”一词吗或者是其他原因?也许这会有所帮助:你不能在类上执行方法,除非它们是静态方法。你总是需要一个对象来执行方法——直接执行或通过指针/引用执行。要清楚,要求一个“简单的英语”解释没有错,但你需要告诉我们你到底不明白什么。关于
虚拟
功能,什么让您感到困惑?我们不会去定义
virtual
函数定义中的每一个单词。@Joni ya我认为overidden partA private virtual方法也可以被派生类重写。这是C++中模板方法模式实现的重要组成部分。@ JuangopANZA不是重新定义的吗?如果它是私有的,我不确定派生类对它的可见性如何-你能再解释一点或者给我指一些阅读材料吗?不,它是重写的。试试看!