基本クラスは、メソッドが非仮想であることを明示的に宣言します。Visual Studio 2008、2010、2012、および使用するコンパイラのイデオン(gcc 4.7+ ?) で動作します。
#include <iostream>
class sayhi
{
public:
void hi(){std::cout<<"hello"<<std::endl;}
};
class greet: public sayhi
{
public:
virtual void hi(){std::cout<<"hello world"<<std::endl;}
};
int main()
{
greet noob;
noob.hi(); //Prints hello world
return 0;
}
これも機能します-メソッドはプライベートであり、基本クラスでは非仮想です。
#include <iostream>
class sayhi
{
private:
void hi(){std::cout<<"hello"<<std::endl;}
};
class greet: public sayhi
{
public:
virtual void hi(){std::cout<<"hello world"<<std::endl;}
};
int main()
{
greet noob;
noob.hi(); //Prints hello world
return 0;
}
私の質問は次のとおりです。
- それは合法ですか?
- なぜそれが機能するのですか?