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(); };
};