老郭 |
|
|||
Windows |
日歷
統計
導航常用鏈接留言簿文章檔案搜索最新評論
|
c++的三種繼承方式:
public,private,protected. (1)先從一個類說起: class A{ private: int i; public: void f(){ cout<<i<<endl;//這是可以的,類內部的函數可以訪問它的私有成員。 } private: void g(){ cout<<i<<endl;//這也是可以的,類內部的函數可以訪問它的私有成員,包括public,private,protected; } }; void main(){ A a; //a.i; //這是錯誤的,這個函數沒有權限訪問私有變量。 } (2) class A{ private: int i; }; void main(){ A a; //a.i; //這是錯誤的,這個函數沒有權限訪問私有變量。 } (3) class A{ private: int i; friend void main();//聲明main函數是這個類A的友員函數。 }; void main(){ A a; a.i; //這是正確的,友元函數有權限訪問類的私有成員變量。 } (4)關于類的protected 成員變量。 class A{ protected: int x; }; class B:public A{ public: void f1(){ cout<<x<<endl; } private: void f2(){ cout<<x<<endl; } protected: void f3(){ cout<<x<<endl; } } //總結:類B是從類A(public)繼承而來, //類B的成員函數(包括 public,protected,private)都可以訪問類A的私有成員變量。 //其實類B可以從類A(protected,private)繼承,結果都一樣,它的成員函數都可以訪問類A的私有變量。 //!注意:是成員函數可以。 (5)接上面(4) class A{ protected: int x; }; class B:public A{ public: void f1(){ cout<<x<<endl;//可以 } private: void f2(){ cout<<x<<endl;//可以 } protected: void f3(){ cout<<x<<endl;//可以 } } void main(){ B b; b.x=1;//不可以,結合上面(4)所說,是子類的成員函數可以,但是不能通過對象直接訪問。 } (6)關于單個類的protected成員變量。 它在類內部訪問屬性和私有成員一樣。 class A{ private: int x; protected: int y; public: void f1(){ cout<<x<<y<<endl;//和私有成員變量一樣,可以訪問。 } } void main(){ A a; cout<<a.x<<a.y<<endl;//和私有成員變量一樣,不可以這樣訪問。 } (7)假設B類繼承A類,即B類是A類的直接子類。 public繼承:A的訪問屬性在B類保持不變。 A的public----------B仍是public; A的protected-------B仍是protected; A的private---------B仍是private; protected繼承: A的public----------B變成protected; A的protected-------B仍是protected; A的private---------B仍是private; private繼承: A的public----------B變成private; A的protected-------B變成private; A的private---------B仍是private; //這里說的都是直接子類。 //結合(7)和以上幾點 各類的訪問權限,尤其是(protected修飾的)就可以明白 //C++繼承下各個類之間的訪問權限。 (8)備注:以上只設計單繼承。多繼承未作研究。 |
![]() |
|
Copyright © 老郭 | Powered by: 博客園 模板提供:滬江博客 |