this指標和類的繼承

2022-03-22 06:06:10 字數 2020 閱讀 1775

神秘的傢伙

在物件的世界裡,有乙個特殊的指標,它叫做this。我們從來沒有見過他,但是他卻從來都存在。我們通過乙個典型的例子來認識它:

class

human

human::human(

char

fishc)

我們看到,在」fishc = 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

superclass

class pig : public animal

關於public的含義將在稍後做出詳細解釋,目前我們只要抄下來即可,example.cpp:

#include #include 

class

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

view code

繼承 基類和派生類指標

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...