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