繼承介面和實現, 主要包含三種方式:
1. 只繼承介面, 純虛函數;
2. 繼承介面和實現, 允許覆寫(override), 虛函數;
3. 繼承介面和實現, 不允許覆寫(override), 非虛函數;
1. 純虛函數:
只繼承介面, 但是衍生類別必須實現其介面;
純虛函數也可以包含實現, 但是只能在指明類(即, class::)的時候使用
2. 虛函數:
繼承介面和實現, 衍生類別可以覆寫(override), 也可以使用預設版本, 即基函數(base)版本;
純虛函數約束程式更多, 虛函數更靈活;
3. 非虛函數
繼承介面和實現, 強制的提供衍生類別的實現, 不可以改變, 即不可以覆寫(override);
更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/cplus/
關於衍生類別使用純虛函數的實現, 如下:
/************************************************* File: pure_virtual.cpp Copyright: C.L.Wang Author: C.L.Wang Date: 2014-04-01 Description: explicit Email: morndragon@126.com **************************************************/ /*eclipse cdt, gcc 4.8.1*/ #include <iostream> using namespace std; class Shape { public: virtual void draw() const; virtual void error (const std::string& msg) {std::cout << msg << std::endl;}; int objectID() const { return 1;}; }; void Shape::draw() const { std::cout << "Shape Draw!" << std::endl; } class Rectangle: public Shape { public: void draw() const {std::cout << "Rect Draw!" << std::endl;}; }; class Ellipse: public Shape { public: void draw() const {std::cout << "Elli Draw!" << std::endl;}; }; int main () { Shape* ps1 = new Rectangle; Shape* ps2 = new Ellipse; ps1->draw(); ps2->draw(); std::cout << "Attention: " << std::endl; ps1->Shape::draw(); ps2->Shape::draw(); return 0; }
輸出:
Rect Draw! Elli Draw! Attention: Shape Draw! Shape Draw!
作者:csdn部落格 Spike_King