我想了解C++代碼中的多態行爲。看到下面的程序的輸出,我感到驚訝。Visual Studio 2008:C++的多態行爲
下面的代碼,我在下面的編程語句期待一些編譯錯誤/崩潰的輸出。但是這個程序的輸出讓我很吃驚。
p = (Class1*) &object3;
p->f();
p->g();
我不明白爲什麼。我正在使用Visual Studio 2008.
代碼片段。
#include "stdafx.h"
#include <iostream>
using namespace std;
class Class1
{
public:
virtual void f()
{
cout << "Function f() in Class1\n";
}
void g()
{
cout << "Function g() in Class1\n";
}
};
class Class2
{
public:
virtual void f()
{
cout << "Function f() in Class2\n";
}
void g()
{
cout << "Function g() in Class2\n";
}
};
class Class3
{
public:
virtual void h()
{
cout << "Function h() in Class3\n";
}
};
int _tmain(int argc, _TCHAR* argv[])
{
Class1 object1, *p;
Class2 object2;
Class3 object3;
p = &object1;
p->f();
p->g();
p = (Class1*) &object2;
p->f();
p->g();
p = (Class1*) &object3;
p->f();
p->g();
//p->h(); Compilation error
return 0;
}
O/P:
功能的Class1的Class1中在等級2中f()的
函數G()
函數f()
函數G()在Class3中
的Class1函數H()
Class 1中的函數g()
投射到不相關的類型是未定義的行爲,所以任何事情都可能發生。告訴我打招呼的比薩餅送貨員。 – fredoverflow 2013-02-18 17:19:11
這個程序沒有多態行爲,它有未定義的行爲(即任何事情都可能發生)。 – 2013-02-18 17:19:41