#include <iostream>
class A
{
public:
A()
{
std::cout << "\n A_Constructor \t" << this <<std::endl;
}
void A_Method()
{
std::cout <<"\n A_Method \t" << this <<std::endl;
}
};
class B:public A
{
public:
B()
{
std::cout <<"\n B_Constructor \n";
}
void B_Method()
{
std::cout <<"\n B_Method \t" << this <<std::endl;
}
};
int main()
{
A *a_obj = new A;
B *b_obj = static_cast<B*> (a_obj); // This isn't safe.
b_obj->B_Method();
getchar();
return 0;
}
出力:
A_Constructor 001C4890
B_Method 001C4890
型変換には実行時チェックが含まれstatic_cast
ないため、安全ではありません。しかし、この例では、私は私が予期していなかったものを手に入れました。への呼び出しがないためB::B()
、そのメンバーは誰からも呼び出されないようにする必要がありますb_obj
。それにもかかわらず、私は出力を得ました。
この単純なケースでは、安全ではないことがわかっていますが、成功した可能性があります。私の疑問は-
- の呼び出しはありませんが、どうすればメンバー機能
B::B()
にアクセスできましたか。class B
- 誰かが例を挙げてください。これは安全ではなく、間違っている可能性があります(前に示したものは悪い例として役立つかもしれませんが、さらに良いですが)。
Visual Studio 2010で、\Wallオプションを設定して実行しました。