1
如果從指針轉換至基礎構件的指針的派生類成員有效,爲什麼以下代碼編譯失敗爲什麼衍生指針從基座構件轉換給出錯誤
class Base
{
public:
virtual void fun1()
{
cout<<"fun1 in Base"<<endl;
}
};
class Der
{
public:
void fun1()
{
cout<<"fun1 in Der"<<endl;
}
};
int main()
{
void (Der::*funptr)() = &Base::fun1;
}
編譯器提供了一個錯誤說
error: cannot convert 'void (Base::)()' to 'void (Der::)()' in initialization|
因爲它們是不同的類型?多態性適用於對象本身,而不是成員函數。 – goji
@Troy:指向成員的指針遵守* contravariance *的規律。 OP說關於轉換的有效性是真的。雖然代碼編寫時沒有引起足夠的重視。 – AnT