2016-06-07 2 views
-1

기본 클래스의 모든 함수를 내 클라이언트에 보이지 않게하려면 파생 클래스를 통해서만 액세스 할 수 있습니다.기본 클래스 함수를 클라이언트에 보이지 않게 만들기

C++에서이를 수행 할 수있는 방법이 있습니까?

감사합니다.

+0

당신이 잘 알고있는 보호 된 키워드? – UnKnown

+2

'보호됨'으로 설정합니다. 'client'는 기본 클래스의 객체를 의미합니까? – sameerkn

+3

불분명 함. "보이지 않는"및 "고객"은 무엇을 의미합니까? – user4581301

답변

0

는 하나의 클래스에서 f() 기능에 액세스 할 수 있습니다 보호 키워드를

class A{ 
    protected: 
     void f(){ 
      std::cout << "F" << std::endl;s 
     } 
}; 
class B:public A{ 
    // access f() here... 
}; 

모든 파생 클래스를 사용

두 개의 방법이 있습니다.

두 번째 방법 : A.의 만들기 B 클래스 친구 클래스

#include <iostream> 
class A{ 
    private: 
     void f(){ 
      std::cout << "F" << std::endl; 
     } 
    friend class B; 
}; 

class B:public A{ 
    A obj; 
    public: 
     void accessF(){ 
      obj.f(); 
     } 
}; 
int main(){ 
    B obj; 
    obj.accessF(); 

    return 0; 
} 
+0

'A'가'friend'를 위해서'B'의 선언을 필요로합니다. – user4581301

+0

@ user4581301 나는 그렇게 생각하지 않는다. 나는 그것을 시험했다. 왜 필요한지 설명해 주시겠습니까? – UnKnown

+0

사과드립니다. 총을 뛰어 넘었 어. 동일한 네임 스페이스 예외입니다. – user4581301

0

사용 액세스 지정자 (기본 클래스가 당신의 통제를받지 않는 경우) :

class A 
{ public: 
    void f() {} 
    void h() {} 
}; 
class B: private A // all members of A are private 
{ public: 
    void g() 
    { f(); 
    } 
    using A::h;  // adjust access 
}; 

int main() 
{ A a; 
    a.f(); 
    B b; 
    b.g(); 
    b.h(); 
    b.f(); // error: 'void A::f()' is inaccessible 
} 
관련 문제