神秘的傢伙
在物件的世界裡,有乙個特殊的指標,它叫做this。我們從來沒有見過他,但是他卻從來都存在。我們通過乙個典型的例子來認識它:
class我們看到,在」fishc = fishc」之前,所有的語法都沒有任何問題:human
human::human(
char
fishc)
human()構造器有乙個名為fishc的引數,雖然他與human類裡邊的屬性同名,但卻是不相干的兩樣東西,所以並沒有錯。 可是,問題是怎樣才能讓構造器知道哪個是引數,哪個是屬性呢?
這時候,就需要用到他了 this指標。
this -> fishc = fishc現在編譯器就懂了,賦值操作符的左邊將被解釋為當前物件的fishc屬性,右邊將被解釋為構造器的傳入來的fishc引數。
注意: 使用this指標的基本原則是:如果**不存在二義性隱患,就不必使用this指標!
this指標在一些更加高階的方法裡也會用到,但我們暫時不想把事情弄得那麼複雜。。。。。
類的繼承
繼承是面對物件程式設計技術的乙個核心概念,它使傳統的軟體開發模式發生了革命性的變化。
繼承機制使得程式設計師可以建立乙個類的堆疊層次結構,每個子類均將繼承在它的基類裡定義的方法和屬性。
那麼到底有啥作用? 簡單地說,通過繼承機制,程式設計師可以對現有的**進行進一步的擴充套件,並應用在新的程式中。
假設我們有乙隻烏龜和乙隻豬,它們都有一些共同特徵:例如都有嘴巴會吃東西,都睡覺,都看到美女會流口水云云。 當然,它們也有不同的地方:例如烏龜會游泳,豬會爬樹。。。。。。 我們說回程式設計,那要如何才能把這些變成c++的類呢? 首先我們會說烏龜和豬都是動物,它們都可以xxoo,我們發覺它們都是動物的子類。
基類和子類
那麼我們就需要編寫乙個animal類作為turtle類和pig類的基類。
基類: 基類是可以派生出其他的類,也稱為父類或超類。比如這裡的animal類是基類。
子類: 子類是從基類派生出來的類,比如這裡的turtle類和pig類是子類。
那麼animal類就擁有了turtle類和pig類的共同特徵:吃東西、睡覺、流口水。這裡我們把這些動作都抽象化為方法:
eat(), sleep(), drool();
代表吃東西、睡覺、流口水的eat(), sleep(), drool() 是animal類裡的方法,因為每只動物都會做這些動作。 而swim() 方法在turtle類裡實現,climb() 方法在pig類裡實現。
動物都有嘴巴,而嘴巴是名詞不是動作,所以要翻譯成類的屬性,而不能翻譯成類的方法。 我們將mouth轉變為animal類的乙個成員變數(屬性)。
現在思維上已經幫大家打通了,我們已經能夠理解乙個類的層次結構。 接下來,我們要把對繼承關係的描述轉化為c++**,這需要使用如下所示的語法:
class subclass : public關於public的含義將在稍後做出詳細解釋,目前我們只要抄下來即可,example.cpp:superclass
class pig : public animal
#include #includeview codeclass
animal
;class pig : public
animal
;class turtle : public
animal
;void
animal::eat()
void
animal::sleep()
void
animal::drool()
void
pig::climb()
void
turtle::swim()
intmain()
繼承 基類和派生類指標
1,直接用基類指標引用基類物件 2,直接用派生類指標引用派生類物件 3,用基類指標引用乙個派生類物件,由於派生類物件也是基類的物件,所以這種引用是安全的,但是只能引用基類成員。若試圖通過基類指標引用那些只在派生類中才有的成員,編譯器會報告語法錯誤。解決該問題的答案是虛函式和多型性 4,用派生類指標引...
c 基類指標指向繼承類呼叫繼承類函式
類裡面過載運算子 需要使用友元函式,而友元函式,不能作為虛函式。所以,基類指標無法直接呼叫繼承類裡重構的 使用類轉換,能解決掉,基類指標 呼叫 繼承類 函式的問題。include include include using namespace std class person friend istr...
類的繼承和派生
格式 class 派生類名 繼承方式 基類名,繼承方式 基類名.繼承形式多種多樣 繼承會把基類的所有成員均繼承 1.graph lr a類 b a類 c graph lr a類 b類 b類 c類 graph lr a類 b類 b類 c類 a類 d類 d類 c類 繼承方式有 public,protec...