類的總結

類的總結這一段時間的學習,對類的理解有了一些更深的瞭解,這一段時間學習到了組合和繼承,虛函數和多態。
首先是組合和繼承,組合在使用時比較簡單,就是將一些基本的類作爲一些類的成員,從而運用這些類的功能。

 例:class number
 {
 };
 class all
 { 
  number l;
  };

這就是最基本的組合方式。繼承類似組合的作用,組合是將其他的類作爲成員放入類中,而繼承則是直接將基類的成員直接繼承到派生類中。

`例如:class base
  {
  int a;
  };
  class second:public base
  {
  };
  `這樣

base中所有的成員就被集成到second中,包括私有,保護和公有,但是私有的成員不能夠被直接使用,有參的構造函數和析構函數,派生類的構造函數與析構函數也必須有參,對派生類的上一層基類中的析構與構造進行定義,

 `例如:class base
 

     {int l;
      public:
      base(int a):l(a)      \\\\基類的構造函數
    {
    }
    }
    ;class second:public base
    {
    second(int a):base(a)        \\派生類的構造函數
    {}
    };`

而且構造函數先後順序爲基類,對象成員,派生類,調用析構函數的順序爲派生類,對象成員,基類。這樣second中也存在a這個成員但是second不能對a進行操作,因爲a是私有成員,只能通過共有函數進行對a的操作,也可以將a設置爲protected類型,這樣second就可以直接對a進行操作。所以若是基類中的數據希望被派生類操作,最好是將數據成員設爲protected。

`例:
class base
{protected:int a;
};
class second:public base
{
};`

派生類中有基類中所有的成員,並且本身的成員也保留,但也存在基類中的函數並不能實現想要的功能,這時候就可以採用覆蓋的方式來修改函數的內容,即在派生類中定義的函數的定義方式與基類相同的情況,則派生類中這個函數的內容是派生類中的內容,若是再使用基類中的函數,則可以採用基類::函數名的方式

 例:class base{
    public:void print() 
         {        
          cout<<”1”;
         }
          };
          class new{
            void print()           \\對基類中函數進行覆蓋
            {cout<<”2”;
            base::print();     \\重新調用在派生類中被覆蓋的基類中的成員函數
            }
            };

繼承之後產生的派生類是可以再加入新成員的。其次是虛函數,虛函數其中一個作用便是可以實現多態,在基類中定義一個虛函數格式爲:

  virtual 返回類型 函數名();

這樣有這個基類產生的派生類中可以對virtual後的函數進行定義,但定義時要和基類中定義函數的方式相同(包括返回值,函數名,參數數量,參數類型和順序),否則沒辦法達到預期的效果,也可以不進行定義,但定義時要注意如果只是參數不同,就和一般的重載函數一樣,但若是返回值類型不同就會報錯。
虛函數定義完成之後,繼承之後產生的派生類的此函數就是派生中的函數,由於這個特性,很多時候在基類中對虛函數的內容可能就顯得有些多餘,然後我們就可以使用純虛函數,這樣在派生類在對純虛函數進行定義,作用就可以和虛函數一樣。擁有純虛函數的類就被稱爲抽象類。純虛函數的優點是可以先不用定義函數的功能,而是由派生類進行定義即可,另外要注意析構函數可以做虛函數,但是構造函數不可以。
定義方式:virtual 返回類型 函數名()=0;
虛函數可以實現多態,最簡單的一個應用則是將派生類引用或傳址給基類,這樣基類中的虛函數會根據派生類中的對應函數定義來確定函數的功能,主要採用的是傳址和引用兩個方式,但引用之後的基類只保留基類原有的函數和對應虛函數。
例:

 `1:base *p; 
                second l; p=&l;   
              2:     
               second l;  
               base &p=l;

但只能通過基類指針的方式才能實現多態,即第一種方式。通過這種方式就可以在使用不同的類時,讓每一個類都擁有自己獨特需要的功能函數,不需要再在派生類中對想要的函數功能進行重新定義` ,

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章