[C++程序语言设计笔记一]面向对象编程抽象,继承,重写基本介绍
生活随笔
收集整理的這篇文章主要介紹了
[C++程序语言设计笔记一]面向对象编程抽象,继承,重写基本介绍
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
今天是個不錯的日子,不僅有人收了我做徒弟從此傳授我有關(guān)C++的一些知識,由于前一段時(shí)間喜歡上了外掛的研究也用到了一些MFC的知識及一些Windows APIs編程,但是對C++還是沒有從根本上認(rèn)識。我從來沒有過一個真正意義上的計(jì)算機(jī)老師(那些只會拿著課件給我念的不算),由于一路走來都只有我一個人,身邊的人也全是學(xué)習(xí)科研的,美其名曰:生物工程,我想考過大學(xué)的人都知道這個科目的熱度有多大---全國十大騙人專業(yè)之首。我放棄了我的專業(yè)的所有,一頭投向計(jì)算機(jī)中,這可能也是由于我在高中就開始玩“黑客技術(shù)”以及我對計(jì)算機(jī)的敬仰之情所致。說了這么多,都是要感謝這位師傅,而且還是個女生,雖然我們是在網(wǎng)路上認(rèn)識.....前一段時(shí)間看了《Windows核心編程》沒有深入了解,誰都知道一本比較好的書沒看個幾遍是很難懂得他的精髓的,和我學(xué)習(xí).NET一樣(我看了紅皮人頭書WROX出版的《.NET入門經(jīng)典》總共四遍,第一遍不知道說什么;第二編好像是這樣;第三遍基本上懂一點(diǎn);第四遍他才真正把我從VB中給帶到C#過來而一發(fā)不可自拔,其實(shí)中間版本也有更替了現(xiàn)在應(yīng)該是第4版了吧<懷疑中>)。今天師傅就推薦了一本《C++程序語言設(shè)計(jì)》今晚下班回來我就慢慢的讀起,C++之父的著作應(yīng)該不錯,從今后的一些文章中我會記錄一些我對C++的理解,我要把他從0開始的學(xué)期。開了他的寫作方法不愧為一代大師,看的很爽很容易把我?guī)霠顟B(tài)。
????
??? C++中有頭文件和實(shí)現(xiàn)文件共同來完成一個類或其他的方法,更術(shù)語一點(diǎn)是一個是聲明,一個是定義,聲明是讓人能夠在不同的程序頁面或不同的DLL之間知道你到底有多少東西,這里也可以這樣解釋你到底想讓人知道多少;而定義是你聲明的函數(shù)(方法)是怎樣完成一件事情的,也就是方法的實(shí)現(xiàn)。在《C++程序語言設(shè)計(jì)》中舉了個堆棧的例子,例如我們在Stack.h中聲明了一個類,而在Stack.cpp中實(shí)現(xiàn)了這個類的方法(當(dāng)然要include頭文件),當(dāng)我們在其他頁面中要用到Stack類時(shí)就要引用到Stack.h文件,如下圖所示:
??? 下面我們來看看Stack.h的定義: class Stack
{
public:
?? ?Stack(int s);
?? ?~Stack(void);
private:
?? ?const int max_size;
?? ?char* v;
?? ?int top = 0;
public:
?? ?void push(char c);
?? ?char pop();
?? ?class Overflow{};//異常
?? ?class Underflow{};//異常
?? ?class BadSize{};//異常
}; ??? 下面是實(shí)現(xiàn)Stack.h的Stack.cpp的定義:
?1?#include?"Stack.h"
?2?
?3?Stack::Stack(int?s)
?4?{
?5?????top?=?0;
?6?????if(s?<?0?||?s?>?10000)
?7?????????throw?BadSize();
?8?
?9?????max_size?=?s;
10?????v?=?new?char[s];
11?}
12?
13?Stack::~Stack(void)
14?{
15?????delete[]?v;
16?}
17?
18?Stack::push(char?c)
19?{
20?????if(top?==?max_size)
21?????????throw?Overflow();
22?????????
23?????v[top]?=?c;
24?????top++;
25?}
26?
27?Stack::pop()
28?{
29?????if(top?=?0)
30?????????throw?Underflow();
31?????top--;
32?????return?v[top];
33?}
??? 從上面我們就可以看出了怎樣定義一個類,這個只是堆棧的一種,可能不同類型的堆棧他們的push和pop的方法實(shí)現(xiàn)的不一樣,這樣我們?yōu)榱四軌蛱峁┙o多個類型使用面向?qū)ο蟮奶匦浴袄^承”。把Stack類定義為一個抽象類型,而實(shí)現(xiàn)抽象類型中的方法的不同類型也稱為多態(tài)類型。我們需要借助關(guān)鍵字virtual來聲明,例如我們只要把上面的push和pop方法的聲明改成如下所示:
????virtual?void?push(char?c)=0;
????virtual?char?pop()=0;
????從上面我們可以看到聲明后帶著“=0”這個表示在繼承的子類中必須重寫此方法[如果你熟悉C#的話,我覺得這就是抽象abstract]。當(dāng)然當(dāng)我們應(yīng)用到其他函數(shù)中是可以聲明一個引用變量如下所示:
void?f(Stack&?s); ?
????這樣將繼承的子類實(shí)例引用到f的參數(shù)中就可以實(shí)現(xiàn)了[C#和這個很像,也許C#就是從這邊接過來的東西,我是.NET的開發(fā)人員對此也比較熟悉就不多說了]。當(dāng)我們子類繼承基類時(shí)具有幾個訪問權(quán)限,通常我們使用的都是public關(guān)于這個我們在以后還會碰到這里就不多說了,要繼承一個基類,必須包含基類的頭文件,并在聲明類的時(shí)候通過":"來實(shí)現(xiàn)繼承如:ListStack:public Stack,子類的實(shí)現(xiàn)方式和其他一樣。
本文轉(zhuǎn)自網(wǎng)魂小兵博客園博客,原文鏈接:http://www.cnblogs.com/xdotnet/archive/2007/09/17/cplusplus_pdl_notes_one.html,如需轉(zhuǎn)載請自行聯(lián)系原作者
????
??? C++中有頭文件和實(shí)現(xiàn)文件共同來完成一個類或其他的方法,更術(shù)語一點(diǎn)是一個是聲明,一個是定義,聲明是讓人能夠在不同的程序頁面或不同的DLL之間知道你到底有多少東西,這里也可以這樣解釋你到底想讓人知道多少;而定義是你聲明的函數(shù)(方法)是怎樣完成一件事情的,也就是方法的實(shí)現(xiàn)。在《C++程序語言設(shè)計(jì)》中舉了個堆棧的例子,例如我們在Stack.h中聲明了一個類,而在Stack.cpp中實(shí)現(xiàn)了這個類的方法(當(dāng)然要include頭文件),當(dāng)我們在其他頁面中要用到Stack類時(shí)就要引用到Stack.h文件,如下圖所示:
??? 下面我們來看看Stack.h的定義: class Stack
{
public:
?? ?Stack(int s);
?? ?~Stack(void);
private:
?? ?const int max_size;
?? ?char* v;
?? ?int top = 0;
public:
?? ?void push(char c);
?? ?char pop();
?? ?class Overflow{};//異常
?? ?class Underflow{};//異常
?? ?class BadSize{};//異常
}; ??? 下面是實(shí)現(xiàn)Stack.h的Stack.cpp的定義:
?1?#include?"Stack.h"
?2?
?3?Stack::Stack(int?s)
?4?{
?5?????top?=?0;
?6?????if(s?<?0?||?s?>?10000)
?7?????????throw?BadSize();
?8?
?9?????max_size?=?s;
10?????v?=?new?char[s];
11?}
12?
13?Stack::~Stack(void)
14?{
15?????delete[]?v;
16?}
17?
18?Stack::push(char?c)
19?{
20?????if(top?==?max_size)
21?????????throw?Overflow();
22?????????
23?????v[top]?=?c;
24?????top++;
25?}
26?
27?Stack::pop()
28?{
29?????if(top?=?0)
30?????????throw?Underflow();
31?????top--;
32?????return?v[top];
33?}
??? 從上面我們就可以看出了怎樣定義一個類,這個只是堆棧的一種,可能不同類型的堆棧他們的push和pop的方法實(shí)現(xiàn)的不一樣,這樣我們?yōu)榱四軌蛱峁┙o多個類型使用面向?qū)ο蟮奶匦浴袄^承”。把Stack類定義為一個抽象類型,而實(shí)現(xiàn)抽象類型中的方法的不同類型也稱為多態(tài)類型。我們需要借助關(guān)鍵字virtual來聲明,例如我們只要把上面的push和pop方法的聲明改成如下所示:
????virtual?void?push(char?c)=0;
????virtual?char?pop()=0;
????從上面我們可以看到聲明后帶著“=0”這個表示在繼承的子類中必須重寫此方法[如果你熟悉C#的話,我覺得這就是抽象abstract]。當(dāng)然當(dāng)我們應(yīng)用到其他函數(shù)中是可以聲明一個引用變量如下所示:
void?f(Stack&?s); ?
????這樣將繼承的子類實(shí)例引用到f的參數(shù)中就可以實(shí)現(xiàn)了[C#和這個很像,也許C#就是從這邊接過來的東西,我是.NET的開發(fā)人員對此也比較熟悉就不多說了]。當(dāng)我們子類繼承基類時(shí)具有幾個訪問權(quán)限,通常我們使用的都是public關(guān)于這個我們在以后還會碰到這里就不多說了,要繼承一個基類,必須包含基類的頭文件,并在聲明類的時(shí)候通過":"來實(shí)現(xiàn)繼承如:ListStack:public Stack,子類的實(shí)現(xiàn)方式和其他一樣。
本文轉(zhuǎn)自網(wǎng)魂小兵博客園博客,原文鏈接:http://www.cnblogs.com/xdotnet/archive/2007/09/17/cplusplus_pdl_notes_one.html,如需轉(zhuǎn)載請自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的[C++程序语言设计笔记一]面向对象编程抽象,继承,重写基本介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

- 上一篇: 重视细节,方能得到认可
- 下一篇: 04、Vue.js---自定义过滤器