2014-09-19 2 views
-2

그래서 내 교수는 우리가 알아 내야 할 종이에 코드로 우리를 테스트하는 것을 좋아합니다. 나는 코드를 게시하지 않을 것이다. 왜냐하면 나는 대답을 찾지 않을 것이기 때문에 그가 혼란스럽게 한 것은 우리가 한 클래스의 객체를 초기화 한 다음 다른 클래스의 포인터를 초기화하여 상기 목적. 그것은 나에게서 지옥을 혼란 시켰고 그것을 찾는 방법을 알지 못하는 특별한 문제입니다. 예 :클래스 E의 멤버를 가리키는 클래스 D의 포인터

class A { 

// etc 
} 

... 


class D { 
void fy(etc, etc, etc) {} 
// etc 
} 


class E: public D { 
void fy(etc, etc, etc) {} 
// etc 
} 

main() { 
E e 
D *d = &e 
d->fy(15,25) 
//everything else 

"d-> fy()"는 D 또는 E의 fy() 함수를 수행합니까? D의 fy() 함수가 가상이라면, E의 함수를 쓸 것인가?

포인터가 한 클래스의 포인터 일 때 다른 포인터를 가리킬 때 포인터는 무엇을합니까? 나는이 질문이 이전에 대답되었을 수도 있지만 어디서나 그것을 찾을 수는 없다는 것을 알기 때문에 나는 대답으로 향하는 것에 감사 할뿐입니다. 고맙습니다.

+0

Liskov Substitution Principle을 살펴보면'E'는'D'이므로'E *'를 사용하고'D * '에 저장할 수 있습니다. –

답변

0

라인 class E: public DED이라고 말합니다. 따라서, E의 임의의 어드레스는 D에 대한 포인터에 저장 될 수있다.

0

대답은 클래스 선언에있다 :

class E : public D 

E가 타입 E의 모든 객체가 결과 유형 D.의 오브젝트 타입의 인스턴스임을 의미 D의 서브 클래스 인 E는 D 유형의 포인터에 할당 될 수 있습니다. 그러나 포인터 유형에 여전히 D가 있기 때문에 해당 포인터에 액세스 할 때 E 클래스가 아닌 D 클래스의 멤버에만 액세스 할 수 있습니다. E 클래스에서 객체 유형을 형변환해야합니다.

+0

편집에 대한 응답으로 http://stackoverflow.com/questions/11067975/visual-c-overriding-non-virtual-methods를 확인하십시오. – rdowell

관련 문제