2014-04-07 3 views
0

저는 C++을 처음 접했고 도서관 관리 시스템을하고 있습니다. 나는 이런 수업을한다. 예 :상위 클래스에서 하위 클래스 함수를 호출하는 방법은 무엇입니까?

class mainLibrary{ 
    void library(){ 
    cout<<"Welcome to Our Library. Please choose following options"<<endl; 
    cout<<"1. Member Section, 2. Lending Section"<<endl; 
    if(userinput==1){ 
    memberclassfunction();//Error : use of undeclared identifier 'memberclassfunction'. 
    }else{ 
    lendingclassfunction();//Error : use of undeclared identifier 'lendingclassfunction'. 
} 
} 
}; 

class Member:public mainLibrary{ 
void memberclassfunction(){ 
//do something 
} 
}; 

class lending:public Member{ 
void lendingclassfunction(){ 
//do something 
} 
}; 

class mainSystem:public lending{ 
//this is empty and inherit all. 
}; 
void main{ 
mainSystem s1; 
s1.library(); 
} 

은 내가 이런 일을했다. mainLibrary 클래스에서 memberclassfunction(); 프로그램 오류가 표시됩니다. 선언되지 않은 식별자 'memberclassfunction'의 사용.

아무에게도 어떻게 도와 줄 수 있습니까? 나는 포인터로 뭔가를해야한다고 생각하니?

+0

귀하의 질문은 아니지만, 귀하는 집계에 클래스 계층을 사용하고 있으며, 이는 대개 잘못된 아이디어입니다. 각 프로그램 개념에 대해 다른 클래스를 만든 다음,'mainSystem'은 필요한 멤버 변수를가집니다. 코드를 작성하고 사용하는 것이 더 쉬워집니다. – rodrigo

답변

0

memberclassfunction는 mainLibrary가 인터페이스가 될 것이다 당신이 그것을 인스턴스화 할 수 없습니다 것을 의미하는 mainLibrary에서 가상 함수해야합니다.

0

memberclassfunctionlendingclassfunctionmainLibrary 클래스의 멤버가 아니므로 컴파일러에서 이러한 오류를 표시합니다. 당신의 의도는이 기능을 만드는 것이라고 생각합니다 virtual.

클래스 B이 클래스 A에서 상속받을 때마다 전자는 후자의 멤버를 얻습니다.

0

일반적으로 하위 클래스의 메소드에 따라 기본 클래스를 만드는 것은 좋지 않습니다. 그러나 이것을 반드시 수행해야한다면 항상 this을 서브 클래스에 캐스트 할 수 있으며 캐스트가 성공하면 메서드를 호출 할 수 있습니다.

lending *lendingThis = dynamic_cast<lending *>(this); 
if (lendingThis) { 
    lendingThis->lendingclassfunction(); 
} 
관련 문제