在代码下面有两个类。创建一个类型为2的对象,然后将其分配给类1的指针。将一种类型的对象分配给另一种类型
在调用out函数时,调用class 1的out函数。
#include<iostream>
using namespace std;
class one
{
public :
void out()
{
cout<<"one ";
}
};
class two
{
public :
void out()
{
cout<<"two ";
}
};
int main()
{
two dp[3];
one *bp = (one *)dp;
for (int i=0; i<3;i++)
(bp++)->out();
}
输出
one one one
根据我的输出应该是两个而不是一个。 当我们创建了类型2的对象时,那个对象的内存位置包含了第二类以外的函数的地址,那么为什么在分配时,第一类被调用?
编辑 - 此外,即使我们改变了第二类功能的名称,输出没有改变。
那么,你骗了编译器。你为什么期望什么是合理的? –
这是[未定义的行为](http://en.wikipedia.org/wiki/Undefined_behavior),简单明了。 – ildjarn
为什么undefined? –