GeekBand c++學習筆記之三(面向對象三把刀-inheritece,composition,delegation)

 hello,大家好,我又來了,這次要跟大家分享的是,關於C++中一個很大的主題也是C++中一個很重要的功能,就是面向對向的幾個方式,我們就把他歸類為三種,分別是inheritance(繼承)composition(複合)delegation(委託),這三種方式大概就可以把整個面向對象整理下來,因為萬變不離其宗,在總麼複雜的程序也是有這三把大刀所組成的,所以懂了最根本的東西,就可以千變萬化的利用,而有鑒於我現在的水平也是相當有限,所以我就在這裡想大家說明一下我的理解與看法:

第一個:composition(複合),複合的意思是,我們設一個class queue,在其之中我們又再設了他的容器的類型,而他的類型我們也已經設計好了,就是class Itr這個類,而這兩者的關係就是composition,所以我們就可以把這種關係想成,一個嵌套關係,就是一個class A中有class B的對象函數或是變量composition

<span style="font-size:18px;"><span style="font-size:18px;">temlate<class T>
class queue
{
  protected:
   Itr<T> fki;
};
class Itr
{
  protected:
    T j;	
};</span></span>
好的既然我們現在已經懂了composition的關係,那我們就再深入一點,那個類的對象所佔用的內存又有多大呢?好的,我們就來看看:

<span style="font-size:18px;"><span style="font-size:18px;">template<class T>
class queue
{
  protected:
  	deque<T> B;
};
class deque
{
  protected:
  	Itr<T> k;
  	Itr* ko; 
};
class Itr
{
  protected:
    T j;
    T KK;
    T ji;	
};</span></span>

class Itr的對象內存就是4*3=12,class deque的對象內存就是12+4=16,因為指針的內存都是4,所以deque<T>就是16

第二個:inheritnace(繼承),顧名思義,我們就可以知道其實他就是一個class所創建的東西由自身給了另一個class,我們就可以想成class A是個父類,而class B就可以把他想成一個子類,而繼承就是把一個屬於A的東西繼承給了B,所以在B中我們就可以調用A的函數以及他的數據

<span style="font-size:18px;">class First
{
private:
  int f;
public:
  First();
  ~First();
};
//-------------------------------------------
class Second:public First
{
private:
  int fji;
public:
  Second();
  ~Second();	
};</span>

First是父類,而Second是子類,所以我們可以用一個簡單一點的理解方式就是說,父類是金魚,而子類是魚類,這樣我們就更好理解了,子類是包覆著父類的,我們再看深一點,就是virtual function,繼承配上虛函數威力才能顯現出來

<span style="font-size:18px;">class First
{
private:
  int f;
public:
  First();
  ~First();
  int novir();//no virtual
  virtual int impure(const string &s);//impure virtual
  virtual int pure()=0;//pure virtual
//-------------------------------------------
class Second:public First
{
private:
  int fji;
public:
  Second();
  ~Second();
  virtual int impure(const string &s)//impure virtual
  {...............}
  virtual int pure()//pure virtual
  {...............}
};</span>
虛函數是甚麼?就是有先函數在父類中先寫出來,但是定義不一定寫出,而是交給子類定義,其中又分為三類

1.no virtual:就是在父類中已經定義好了,不容子類改變

2.impure virtual:就是在父類中已經給過定義了,但是子類也可以改變

3.pure virtual:就是在父類中完全不定義,全由子類來

第三個:delegation(委託)把First当做Second的一個成员,這就是Delegation

class First{
public:
    First();
    ~First();
private:
    int a;
};
//---------------------------------------------
class Second {
public:
    Second();
    ~Second();
private:
    First temp;
public:
    int Down(void) {   return temp.DownFirst();  };    
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值