簡單介紹一下 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;
}