我试图了解 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;
}
输出/输出:
Class1 中的函数 f()
Class1 中的函数 g()
Class2 中的函数 f()
Class1 中的函数 g()
Class3 中的函数 h()
Class1 中的函数 g()