2017-05-02 13 views
-1

다음은 부울 isAdmin에 따라 새 사용자 또는 새 관리 객체를 만드는 내 코드입니다. 사용자 개체는 기본 개체이며 관리자는이 개체에서 파생됩니다. 나는 사용자 기능을 가지고있는 것처럼 user->adminClasshere 사용자가되고 싶다. 나는 그것이 어떻게 사용자 = 새로운 관리자가 관리자가 아닌 사용자를 생성하도록 변경하는지 모르겠습니다.기본 클래스를 사용하여 파생 클래스 호출

User *user; 

if (isAdmin) 
{ 
    user = new Admin(); 
} 
else 
{ 
    user = new User(userLib); //call constructor 

} 

//User User; 
user->loadLibrary(); 
user->displayLibrary(); 
+1

'new Admin'은 이미 관리자를 만듭니다. 아마도 가상 함수를 읽을 필요가 있지만 정확한 문제가 무엇인지 모른 채 알기 란 어렵습니다. –

+0

raw new와 delete는 사용해서는 안된다는 것에주의하십시오. std :: unique_ptr에 대한 내용은 –

+0

입니다. "user-> adminClasshere"의 의미를 명확히 이해하십시오. 공용 데이터 멤버에 액세스 하시겠습니까? 아니면 멤버 함수입니까? –

답변

1

다형성과 클래스 확장을 혼합합니다.
클래스 확장에서 이미 발견 한 것처럼 확장 클래스로 작업하기 위해 기본 클래스에 대한 포인터를 사용할 수 없습니다.
다형성을 사용하면 파생 클래스는 인터페이스는 같지만 구현이 다르기 때문에 가상 클래스를 사용할 때 기본 클래스의 함수를 호출하면 실제 클래스의 함수로 전달할 수 있습니다.

해결책은 관리자 사용자가있는 경우 별도의 종류의 사용자로 취급하고 일부 추가 기능이있는 일반 사용자 인 것처럼 가장하지 마십시오.

해결책은 아니지만 사용자 포인터를 필요한 유형으로 캐스팅하고 새 포인터를 사용하는 것이 좋습니다. 그러나 실제로 필요한 경우에만 사용하십시오.