程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++虛函數探討(四)

C++虛函數探討(四)

編輯:C++入門知識

 

環境:VS2010

代碼:

 

//public: 

#include <iostream> 

using namespace std; 

 

class A{ 

public: 

    virtual ~A() {} 

    virtual void func() { 

        printf("A::func()\n"); 

    }; 

}; 

 

class B: public A{ 

private: 

    virtual void func(){ 

        printf("B::func()\n"); 

    }; 

}; 

int main(void){ 

    A *p = new B; 

    p->func(); 

    delete p; 

 

//private: 

#include <iostream> 

using namespace std; 

 

class A{ 

public: 

    virtual ~A() {} 

    virtual void func() { 

        printf("A::func()\n"); 

    }; 

}; 

 

class B: private A{ 

public: 

    virtual void func(){ 

        printf("B::func()\n"); 

    }; 

}; 

 

int main(void){ 

    A *p = (A*)new B; 

    p->func(); 

    delete p; 

 

觀察以上兩個程序的輸出結果。

 

1.共有繼承,派生類虛函數為private輸出結果:

\

 

2.私有繼承,派生類虛函數為public輸出結果:

\

 

發現輸出結果一致。

 

總結:多態與成員函數的訪問權限是沒有關系的, 即兩回事. 基類定義了虛函數, 並且是public的.那麼子類只要override虛函數 無論放在什麼樣的訪問權限(private,protect,public), 都以基類的訪問權限為准, 即是public的.

 

作者 Wentasy

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved