簡單介紹一下 protect,public,private 的區別,更詳細的隨後不上。 歡迎糾錯~
以C++為例:
public: 數據成員和函數成員可在成員函數,友元,繼承類中直接使用。亦可以作為接口,供類的用戶使用(即 A a,
a.change())。
private: 數據成員和函數成員,只能在 類成員和友元 中訪問。不能被繼承類訪問(無論何種繼承),雖然作為繼承
類的私有成員,但 在 使用過程中,是通過調用基類的構造函數 完成參數的傳遞的。繼承類不能訪問基類的私有成員。
protect: 在基類中用法同private,基類對象不能訪問。在派生類中,用法同基類的public, 其成員可被其繼承類對象訪問使用。
[cpp]
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 Base
{
private:
int age;
protect:
int num;
}
class Devi : public Base
{
}
Base b; Devi d;
b.num=3; //error
d.num = 3; //ok
繼承類的用戶 在使用從基類繼承的成員時,不僅取決於基類在定義時的訪問標號(私有,公有等),還取決
於自身對基類的繼承方式。同時,繼承類 只能讓訪問權限越小。
同時,注意區分類的接口繼承與實現繼承的區別。
接口繼承,即類的用戶可以直接通過“.”或“->”對函數成員進行調用。
實現繼承,即在類的成員函數定義過程中,對數據成員訪問權限的繼承。
注意區分 類成員與類用戶的區別。
類成員包括 數據成員和函數成員,講的是類的實現。
類用戶指 類的對象,講的是對接口的使用。 通過,對象通過 ".",指向對象的指針通過“->”。
[cpp]
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;
}