[C++程序语言设计笔记一]面向对象编程抽象,继承,重写基本介绍
生活随笔
收集整理的這篇文章主要介紹了
[C++程序语言设计笔记一]面向对象编程抽象,继承,重写基本介绍
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
今天是個不錯的日子,不僅有人收了我做徒弟從此傳授我有關C++的一些知識,由于前一段時間喜歡上了外掛的研究也用到了一些MFC的知識及一些Windows APIs編程,但是對C++還是沒有從根本上認識。我從來沒有過一個真正意義上的計算機老師(那些只會拿著課件給我念的不算),由于一路走來都只有我一個人,身邊的人也全是學習科研的,美其名曰:生物工程,我想考過大學的人都知道這個科目的熱度有多大---全國十大騙人專業之首。我放棄了我的專業的所有,一頭投向計算機中,這可能也是由于我在高中就開始玩“黑客技術”以及我對計算機的敬仰之情所致。說了這么多,都是要感謝這位師傅,而且還是個女生,雖然我們是在網路上認識.....前一段時間看了《Windows核心編程》沒有深入了解,誰都知道一本比較好的書沒看個幾遍是很難懂得他的精髓的,和我學習.NET一樣(我看了紅皮人頭書WROX出版的《.NET入門經典》總共四遍,第一遍不知道說什么;第二編好像是這樣;第三遍基本上懂一點;第四遍他才真正把我從VB中給帶到C#過來而一發不可自拔,其實中間版本也有更替了現在應該是第4版了吧<懷疑中>)。今天師傅就推薦了一本《C++程序語言設計》今晚下班回來我就慢慢的讀起,C++之父的著作應該不錯,從今后的一些文章中我會記錄一些我對C++的理解,我要把他從0開始的學期。開了他的寫作方法不愧為一代大師,看的很爽很容易把我帶入狀態。
????
??? C++中有頭文件和實現文件共同來完成一個類或其他的方法,更術語一點是一個是聲明,一個是定義,聲明是讓人能夠在不同的程序頁面或不同的DLL之間知道你到底有多少東西,這里也可以這樣解釋你到底想讓人知道多少;而定義是你聲明的函數(方法)是怎樣完成一件事情的,也就是方法的實現。在《C++程序語言設計》中舉了個堆棧的例子,例如我們在Stack.h中聲明了一個類,而在Stack.cpp中實現了這個類的方法(當然要include頭文件),當我們在其他頁面中要用到Stack類時就要引用到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{};//異常
}; ??? 下面是實現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的方法實現的不一樣,這樣我們為了能夠提供給多個類型使用面向對象的特性“繼承”。把Stack類定義為一個抽象類型,而實現抽象類型中的方法的不同類型也稱為多態類型。我們需要借助關鍵字virtual來聲明,例如我們只要把上面的push和pop方法的聲明改成如下所示:
????virtual?void?push(char?c)=0;
????virtual?char?pop()=0;
????從上面我們可以看到聲明后帶著“=0”這個表示在繼承的子類中必須重寫此方法[如果你熟悉C#的話,我覺得這就是抽象abstract]。當然當我們應用到其他函數中是可以聲明一個引用變量如下所示:
void?f(Stack&?s); ?
????這樣將繼承的子類實例引用到f的參數中就可以實現了[C#和這個很像,也許C#就是從這邊接過來的東西,我是.NET的開發人員對此也比較熟悉就不多說了]。當我們子類繼承基類時具有幾個訪問權限,通常我們使用的都是public關于這個我們在以后還會碰到這里就不多說了,要繼承一個基類,必須包含基類的頭文件,并在聲明類的時候通過":"來實現繼承如:ListStack:public Stack,子類的實現方式和其他一樣。
本文轉自網魂小兵博客園博客,原文鏈接:http://www.cnblogs.com/xdotnet/archive/2007/09/17/cplusplus_pdl_notes_one.html,如需轉載請自行聯系原作者
????
??? C++中有頭文件和實現文件共同來完成一個類或其他的方法,更術語一點是一個是聲明,一個是定義,聲明是讓人能夠在不同的程序頁面或不同的DLL之間知道你到底有多少東西,這里也可以這樣解釋你到底想讓人知道多少;而定義是你聲明的函數(方法)是怎樣完成一件事情的,也就是方法的實現。在《C++程序語言設計》中舉了個堆棧的例子,例如我們在Stack.h中聲明了一個類,而在Stack.cpp中實現了這個類的方法(當然要include頭文件),當我們在其他頁面中要用到Stack類時就要引用到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{};//異常
}; ??? 下面是實現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的方法實現的不一樣,這樣我們為了能夠提供給多個類型使用面向對象的特性“繼承”。把Stack類定義為一個抽象類型,而實現抽象類型中的方法的不同類型也稱為多態類型。我們需要借助關鍵字virtual來聲明,例如我們只要把上面的push和pop方法的聲明改成如下所示:
????virtual?void?push(char?c)=0;
????virtual?char?pop()=0;
????從上面我們可以看到聲明后帶著“=0”這個表示在繼承的子類中必須重寫此方法[如果你熟悉C#的話,我覺得這就是抽象abstract]。當然當我們應用到其他函數中是可以聲明一個引用變量如下所示:
void?f(Stack&?s); ?
????這樣將繼承的子類實例引用到f的參數中就可以實現了[C#和這個很像,也許C#就是從這邊接過來的東西,我是.NET的開發人員對此也比較熟悉就不多說了]。當我們子類繼承基類時具有幾個訪問權限,通常我們使用的都是public關于這個我們在以后還會碰到這里就不多說了,要繼承一個基類,必須包含基類的頭文件,并在聲明類的時候通過":"來實現繼承如:ListStack:public Stack,子類的實現方式和其他一樣。
本文轉自網魂小兵博客園博客,原文鏈接:http://www.cnblogs.com/xdotnet/archive/2007/09/17/cplusplus_pdl_notes_one.html,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的[C++程序语言设计笔记一]面向对象编程抽象,继承,重写基本介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 重视细节,方能得到认可
- 下一篇: 04、Vue.js---自定义过滤器