Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.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++ 虚拟void funcFoo()常量=0和虚拟void funcFoo()之间的差异=0;_C++_Inheritance - Fatal编程技术网

C++ 虚拟void funcFoo()常量=0和虚拟void funcFoo()之间的差异=0;

C++ 虚拟void funcFoo()常量=0和虚拟void funcFoo()之间的差异=0;,c++,inheritance,C++,Inheritance,我在cpp中有一个声明,其中函数如下: virtual void funcFoo() const = 0; 如果声明为显式的,我假设它可以被另一个类继承,但是它们之间的区别是什么 virtual void funcFoo() = 0; 这对我改进编程很重要,我想知道两者的区别。我不想让坏天气造成故障 提前感谢。区别在于第一个函数可以在const对象上调用,而第二个函数不能。此外,第一个函数只能调用同一对象上的其他const成员函数。关于继承,它们的行为方式相同 另请参见本主题中的。这两个虚拟

我在cpp中有一个声明,其中函数如下:

virtual void funcFoo() const = 0;
如果声明为显式的,我假设它可以被另一个类继承,但是它们之间的区别是什么

virtual void funcFoo() = 0;
这对我改进编程很重要,我想知道两者的区别。我不想让坏天气造成故障


提前感谢。

区别在于第一个函数可以在
const
对象上调用,而第二个函数不能。此外,第一个函数只能调用同一对象上的其他
const
成员函数。关于继承,它们的行为方式相同


另请参见本主题中的。

这两个虚拟函数具有不同的签名,但继承的工作方式相同。前者是常量方法,只能支持常量操作(方法)和对象

第一个签名意味着可以在派生类型的const实例上调用该方法。无法在常量实例上调用第二个版本。它们是不同的签名,因此通过实现第二个,您没有实现或覆盖第一个版本

struct Base {
   virtual void foo() const = 0;
};

struct Derived : Base {
   void foo() { ... } // does NOT implement the base class' foo() method.
};

const方法无法更改对象的状态,因此

virtual void funcFoo() const = 0;
将在此类的常量实例中调用,其差异为

virtual void funcFoo() = 0;
只能在非常量实例中调用。 尝试谷歌的C++中的const逻辑。

<> p>关于const Sturst的最佳教程或FAQ是通过PASHIFIFT的C++ FAQ:

简短回答:
const
正确性。不,相反:第一个函数可以在const和non-const实例上调用,而第二个函数只能在non-const实例上调用(我知道它很复杂,我第一次也弄错了:-),这是最好的答案。我唯一搞砸的是理解什么是
const
对象。。
virtual void funcFoo() const = 0;
// You can't change the state of the object.
// You can call this function via const objects.
// You can only call another const member functions on this object.

virtual void funcFoo() = 0;
// You can change the state of the object.
// You can't call this function via const objects.