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

C++之易混淆知識點五

編輯:C++入門知識

、解析類繼承中父類與子類之間成員的訪問可見度:       外部可見度:指的是被子類繼承的父類成員在子類的外部訪問控制度,有protected、public、private。       內部可見度:指的是被子類繼承的父類成員在子類定義的方法中的內部訪問控制度,有可訪問(Y)、不可訪問(N)。       class A {      private:         void pvA();       protected:         void ptA()     public:         void pbA();          .... }   class B:public A {         void func()         {              pvA();  //error              ptA();   //ok              pbA();  //ok         }            .... }   void g( B &b)         {              b.pvA();  //error              b.ptA();   //error              b.pbA();  //ok         }   class B:protected A {         void func()         {              pvA();  //error              ptA();   //ok              pbA();  //ok         }            .... }   void g( B &b)         {              b.pvA();  //error              b.ptA();   //error              b.pbA();  //error         }   class B:private A {         void func()         {              pvA();  //error              ptA();   //ok              pbA();  //ok         }            .... }   void g( B &b)         {              b.pvA();  //error              b.ptA();   //error              b.pbA();  //error         }   二、類的構造函數中調用虛方法會怎麼樣:         構造函數中調用了虛方法將導致運行時錯誤。原因是:當父類的構造函數被調用的時候,此時子類的構造函數還沒有被調用,但是由於父類的構造函數中調用了虛方法,根據虛方法的實現機制,父類調用的虛方法是定義在子類中的,也就是說在此期間調用的virtual函數下降到子類階層中,而子類的函數要使用子類的成員變量,而此時子類的成員變量還沒有被初始化,這就意味著調用了一個還沒有完成構造的類型對象的方法,於是就出現了調用錯誤。        順便提一下:當一個類型被構造的時候,其構造順序是:先執行成員變量的初始化表達式,然後執行父類的構造函數,最後調用類型自己的構造方法。       三、內存中分配引用類型的實質:       首先在堆棧上分配一個引用對象,在堆上分配一個對象實例,然後使得堆棧上的引用對象指向堆上的對象實例。   例如:   class person {      private:         char *name;         int age;     public:         person(char *s,int n):name(s),age(n){}          .... }   person a=new person("Tom",24); person b=a;  //設計到深淺拷貝的問題

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