2013-04-24 2 views
1

bval을 인쇄하고 있지만 출력은 dval의 값을 표시합니다. 실제 논리는 컴파일러에서 무엇을 사용합니까? 내 예상 출력은 00000 00000 이었지만 출력은 00000 01010입니다.포인터를 사용하여 작업하는 동안 Inheitance가 작동하지 않습니다.

#include <iostream> 
using namespace std; 

class base { 
public: 
    int bval; 
    base() { bval = 0; } 
}; 

class deri : public base { 
    public: 
    int dval; 
    deri() { dval = 1; } 
}; 

void SomeFunc(base *arr , int size) { 
    for(int i = 0; i < size; i++, arr++) 
    cout << arr-> bval; 
    cout<<endl; 
} 

int main() { 
    base BaseArr[5]; 
    SomeFunc(BaseArr, 5); 
    deri DeriArr[5]; 
    SomeFunc(DeriArr, 5); 
    return 0; 
} 
+2

정의되지 않은 동작. 배열을 다형 적으로 처리 할 수 ​​없습니다. 중복 검색 중 ... –

+0

or ... http://stackoverflow.com/questions/1411844/polymorphism-pointers-to-arrays –

답변

3

당신은 시스템을 속이고 "조각 내기"를하고 있습니다.

deribase보다 커서 arr++ 일 때 포인터는 base 개체로 전달됩니다.

용액 포인터 배열을 가지고 있으며,이처럼 base **arr 통과 :

base *foo[5]; 
base BaseArr[5]; 
SomeFunc(BaseArr,5); 
for(int i = 0; i < 5; i++) 
{ 
    foo[i] = &BaseArr[i]; 
} 
SomeFunc(foo, 5); 
관련 문제