2016-06-07 49 views
-1

我想使我的基類中的所有函數對客戶端不可見,只能通過我的派生類訪問。使基類函數對客戶端不可見

有沒有辦法在C++中做到這一點?

謝謝!

+0

你熟悉保護關鍵字? – UnKnown

+2

使他們受到保護。通過「客戶端」你是否指基類的對象? – sameerkn

+3

不明。 「隱形」和「客戶」是什麼意思? – user4581301

回答

0

有兩種方式一種是

使用受保護的關鍵字

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

任何派生類可以從類訪問f()功能。

方式二: 使B級友元類A的

#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

需要'B'的前向聲明才能使'A'變成'friend'。 – 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 
}