需求:我們需要乙個square類和circle類能夠列印出面積、顏色等成員資訊;並且還希望他們能夠列印出自己的特點。
namespace abstractclassdemo
}class square
public string squarecolor
//列印屬性
public void showinfo()
,顏色:");
}//列印特徵
public void showfeature()
}class circle
public string circlecolor
//列印屬性
public void showinfo()
,顏色:");
}//列印特徵
public void showfeature()
}}/* 輸出:
我是長方形,對面平行且相等...
面積:0,顏色:
我是圓形,我特圓....
面積:0,顏色:
*/
通過觀察上面的**,我們知道,除去showfeature方法在兩個類中的功能實現略有不同外,其餘成員都是相似的,所以根據我們學過的繼承的知識,我們可以這樣改寫**.
namespace abstractclassdemo
}class shape
public string color
//列印屬性
public void showinfo()
,顏色:");
}//列印特徵
public virtual void showfeature()
}class square : shape
}class circle : shape
}}/* 輸出:
我是長方形,對面平行且相等...
面積:0,顏色:
我是圓形,我特圓....
面積:0,顏色:
*/
到此為止,我們相當於快速回顧了重寫和多型;在基類中有乙個定義為virtual的函式成員showfeature,它並沒有提供方法實體,因為我們覺得在這裡並沒有必要;當我們將virtual關鍵字 改成 abstract關鍵字時,編譯器提示了兩個錯誤:
根據錯誤提示,我們將基類**改寫成如下形式:
abstract class shape
public string color
//列印屬性
public void showinfo()
,顏色:");
}//列印特徵
public abstract void showfeature();
}
至此我們就完美解決了:普通型別作為基類,showfeature(){}方法中雖提供了方法體,但卻不想提供實現的問題。(完結撒花)。。。別急再往下看一下抽象類的定義吧。抽象類不能被例項化:抽象類中由於含有沒有實現的函式,如果抽象類能夠被例項化,那麼當抽象類的引用呼叫到這個沒有實體的函式時,計算機就不知道如何執行這個函式的行為,這樣會導致程式崩潰;所以乾脆編譯器不讓抽象類被例項化--設定抽象類被例項化的**就會編譯報錯
抽象類可以有抽象成員、也可以有普通的非抽象成員:從上面的**示例就可以驗證這點--shape類既有普通的屬性area、color;普通的方法showinfo();還可以有抽象方法showfeature()
任何派生自抽象類的子類必須使用override關鍵字實現該類的所有抽象成員,除非派生類自己也是抽象類
通過下面**理解抽象類:
namespace abstractclassdemo
}abstract class shape
//非抽象的函式成員
public string color
//非抽象的函式成員
public void showinfo()
,顏色:");
}//抽象成員:注意抽象成員不能被private修飾、不能被virtual修飾
public abstract void showfeature();
}abstract class square : shape
class zhengfangxing : square
}}/*輸出:我是特殊的長方形,我四條邊都相等...*/
抽象類中的成員可以都是抽象成員,不含乙個非抽象成員--當然如果真的是需要這樣實現的話,有專門的型別--介面來實現;以上便是對抽象類的總結,記錄下來以便以後查閱。 虛函式 虛基類 抽象類
一 虛基類 解決二義性,防止雙份拷貝間接基類。否則得用作用域分辨符來區分進行的多個拷貝 將共同基類設定為虛函式,這是從不同的路徑繼承過來的同名資料成員在記憶體中就只有乙個拷貝,同乙個函式名也只有乙個對映。虛基類的宣告是在派生類的定義過程中進行的,語法形式為 class 派生類名 virtual繼承方...
C 抽象基類
為什麼c 要定義抽象基類?c 為什麼要定義抽象基類?抽象類就是類裡定義了純虛成員函式的類。純虛函式只提供了介面,並沒有具體實現。抽象類不能被例項化,通常是作為基類供子類繼承,子類中重寫虛函式,實現具體的介面。為什麼要定義抽象基類呢?依我所見主要有以下原因 1.最重要的原因是,可以將介面與實現分離。介...
虛基類 純虛函式 抽象類
虛基類 純虛函式和抽象類 1 虛基類 在 多繼承 中講過的例子中,由類a,類b1和類b2以及類c組成了類繼承的層次結構。在該結構中,類c的物件將包含兩個類a的子物件。由於類a是派生類c兩條繼承路徑上的乙個公共基類,那麼這個公共基類將在派生類的物件中產生多個基類子物件。如果要想使這個公共基類在派生類中...