#include <iostream>
using namespace std;
struct A {
virtual void f() { cout << "A::f" << endl; }
virtual void f() const { cout << "A::f const" << endl; }
};
struct B : public A {};
struct C : public A {
virtual void f() { cout << "C::f" << endl; }
};
int main()
{
const B b;
b.f(); // prints "A::f const"
const C c;
c.f();
// Compile-time error: passing ‘const C’ as ‘this’ argument of
// ‘virtual void C::f()’ discards qualifiers
}
(我使用GCC)
如此看来,f的const版本()获取隐藏在C.这使得有很大的意义对我来说,却是它是由标准授权的吗?
“虚拟”是一个红色的鲱鱼。我们在这里几乎没有(通过基类指针或引用)调用任何'f'。所有'f'的查找都可以找到最多的'f'。 – MSalters 2010-11-11 09:34:48
虚拟和const并不真正适用于这个问题,但我将它们留作标记,因为我没有看到太多的伤害,也没有必要包含更相关的标记。 – 2010-11-11 09:53:16
我同意'虚拟',但'const'是整个问题的意思。重写'f()'隐藏'f()const'。 – Ari 2010-11-11 12:11:07