문제

이기종 목록을 통해 가상 함수를 호출할 때 멤버 데이터에 값을 할당하는 방법을 파악하는 데 어려움을 겪고 있습니다.

내가 하려는 일의 예는 다음과 같습니다.

class A
{
 protected:
 virtual void func1();

 private:
 A * list;
}

class B: public A
{
 protected:
 void func1();

 private:
 int i1, i2;
}

main() 내에서:

list = new A[10];

list[0] = new B;

list[0]->Func1();

Func1() 선언:

void B::Func1()
{
 int a, b;

 cin >> a >> b;

 list[0]->i1 = a;
 list[0]->i2 = b;

 // or can I just do this:
 // i1 = a;
 // i2 = b;
}

메인에서 부모 클래스의 포인터를 통해 호출하는 경우 파생 클래스의 함수 내에서 파생 클래스의 멤버 데이터에 액세스하는 적절한 방법을 찾고 있습니다.어떤 도움이라도 주시면 감사하겠습니다!

도움이 되었습니까?

해결책

실행하는 동안 virtual 이제 객체의 유형은 함수가 정의된 클래스 또는 파생된 클래스의 유형입니다.즉, 당신의 B::func1() 당신이 알고 있는 기능 this 을 가리킨다 B 물체.객체는 다음에서 파생된 유형일 수 있습니다.B 하지만 당신은 여전히 ​​​​모든 것을 가지고 있습니다 B.

반면에 당신은 ~하지 않다 정적으로 알고 list[0] ~를 가리키다 B 물체.코드에서 주석 처리를 제거한 코드가 작동하지 않습니다.주석 처리된 코드는 괜찮아 보입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top