C++ で奇妙なことに遭遇しましたが、その理由がわかりません。
私はこのようなクラスを持っています
ヘッダファイル
class foo
{
public:
void call_foo();
int get_foo();
int get_foo(int val);
};
ここにcppファイルがあります
#include "foo.h"
#include <iostream>
using namespace std;
void foo::call_foo()
{
int i = 0;
int j = 33;
cout << i + j << endl;
cout << "Hello, Foo" << endl;
}
int foo::get_foo(int val)
{
int a = 345;
int rc = val + a;
cout << rc << endl;
return rc;
}
int foo::get_foo()
{
int a = 100;
int d = 23;
int rc = a + d;
cout << rc << endl;
return rc;
}
以下のようにコードを使用してテストします
int main()
{
int* val = new int[100];
foo* foo_ptr;
foo_ptr = (foo*)val;
foo_ptr->call_foo();
foo_ptr->get_foo();
foo_ptr->get_foo(100);
delete [] val;
return 0;
}
それから私はそれをコンパイルして実行します。
clang++ foo.cpp main.cpp
Apple LLVM バージョン 5.0 (clang-500.2.79) os x 10.9
int ポインターをオブジェクト ポインターに変換し、そのメソッドを呼び出すと、機能します。とても奇妙!何が起こっているのか知っている人はいますか?
私の理解でなぜそれが機能するのかについて、ブログに記事を書きました。ありがとうございました!! オブジェクト構造、仮想関数テーブルについて。ただの中国語版:)