在代碼下面有兩個類。創建一個類型爲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? –