class a //my base abstract class
{
public:
virtual void foo() = 0;
};
class b : public a //my child class with new member object
{
public:
void foo()
{}
int obj;
};
int main()
{
b bee;
a * ptr = &bee;
ptr->obj; //ERROR: class a has no member named "obj"
}
내 질문은 하위 클래스 ("a")를 가리키는 기본 클래스 ("a")에 대한 포인터가있을 때 "obj" ") 객체? 캐스팅은 트릭을해야한다는 것을 알고 있지만 더 나은 솔루션을 찾고 있습니다.기본 abstact 클래스에 대한 포인터를 사용하여 하위 클래스 멤버에 액세스
일부 컨텍스트가 도움이됩니다. 왜 그걸 원하니? 캐스팅이 옵션이 아니면 파생 클래스에서 해당 멤버에 대한 참조 또는 포인터를 반환하는 가상 함수를 재정의해야합니다. 그러나 일반적으로 캡슐화가 중단됩니다. 이렇게하면 기본 클래스에 대한 포인터를 통해 파생 클래스 멤버에 액세스하려는 이유가 다시 나타납니다. – Void
@ Void 아마 맞아, 디자인을 바꾸어야 해. – user1873947