天天看點

protect,public,private 的差別

簡單介紹一下  protect,public,private 的差別,更詳細的随後不上。 歡迎糾錯~

以C++為例:

public:  資料成員和函數成員可在成員函數,友元,繼承類中直接使用。亦可以作為接口,供類的使用者使用(即 A a,

a.change())。

private:  資料成員和函數成員,隻能在  類成員和友元 中通路。不能被繼承類通路(無論何種繼承),雖然作為繼承

類的私有成員,但 在 使用過程中,是通過調用基類的構造函數 完成參數的傳遞的。繼承類不能通路基類的私有成員。

protect:  在基類中用法同private,基類對象不能通路。在派生類中,用法同基類的public, 其成員可被其繼承類對象通路使用。

class Base
{    
private:
    int age;
protect:
    int num;
}
class Devi : public Base
{
}
Base b;  Devi d;
b.num=3;   //error
d.num = 3; //ok      

繼承類的使用者 在使用從基類繼承的成員時,不僅取決于基類在定義時的通路标号(私有,公有等),還取決

于自身對基類的繼承方式。同時,繼承類 隻能讓通路權限越小。

同時,注意區分類的接口繼承與實作繼承的差別。

接口繼承,即類的使用者可以直接通過“.”或“->”對函數成員進行調用。

實作繼承,即在類的成員函數定義過程中,對資料成員通路權限的繼承。

注意區分 類成員與類使用者的差別。

類成員包括 資料成員和函數成員,講的是類的實作。

類使用者指 類的對象,講的是對接口的使用。 通過,對象通過 ".",指向對象的指針通過“->”。

Class A
{
public:
   A(string& Name = "lihao",int Age = 21)
   {}
   virtual void print()const;
private :
   string name;
   int age;
}

void A::print()const
{
   cout<<name<<endl
    <<age<<endl;
}

Class B:public A
{
public:
    B(string& Name,int Age,int Grade):A(Name,Age),grade(Grade)
    {}
private:
    int grade;
}

void B::print()const
{
     A::print();
     cout<<grade<<endl;
}