C++類階層

來源:互聯網
上載者:User

 在一個繼承圖裡,每個名字用virtual刻畫的基類,將總是用這個類的同一個對象表示。在另一方面,沒有用virtual描述的每個基類都有定義自己的子物件去表示它

class B
class XX : B {}; //B是私人基類
struct YY : B {}; //B是公有基類

第一:private, public, protected 訪問標號的存取範圍。
private:只能由1.該類中的函數、2.其友元訪問。
不能被任何其他訪問,該類的對象也不能訪問。

protected:可以被1.該類中的函數、友元 2.子類的函數、子類友元訪問。
但不能被該類的對象訪問。

public:可以被1.該類中的函數、友元 2.子類的函數、子類友元 3.該類的對象訪問。
 
註:友元函數包括3種:設為友元的普通的非成員函數;設為友元的其他類的成員函數;設為友元類中的所有成員函數。

第二:類的繼承後方法屬性變化。
private 屬性不能夠被繼承。
使用private繼承,父類的protected和public屬性在子類中變為private;
使用protected繼承,父類的protected和public屬性在子類中變為protected;
使用public繼承,父類中的protected和public屬性不發生改變;
 
如下所示: 
                            public:            protected:       private:
public繼承             public             protected        不可用
protected繼承       protected       protected        不可用
private繼承           private            private            不可用

protected繼承和private繼承能降低存取權限。

class A
{
public:
    void fun(){cout <<"aa"<<endl;}
};
typedef void (A::* pf)(); //指向成員的指標
A aa;
pf pp = &A::fun;
(aa.*pp)();

靜態成員不予任何對象相關聯,因此指向靜態成員的指標也就是一個常規指標,例如:
class Task
{
    static void schedule();
}
void (*p)() = &Task::schedule; //可以
void (Task::* pm)() = &Task::schedule; //錯誤

建構函式不能是虛函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.