#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