#include class shape
virtual ~shape() {}
virtual long getarea() // error
virtual long getperim()
virtual void draw() {}
};class circle : public shape
~circle() {}
long getarea()
long getperim()
void draw();
private:
int radius;
int circumference;
};void circle::draw()
class rectangle : public shape
virtual ~rectangle() {}
virtual long getarea()
virtual long getperim()
virtual int getlength()
virtual int getwidth()
virtual void draw();
private:
int width;
int length;
};void rectangle::draw()
}class square : public rectangle
long getperim()
};square::square(int newlen):
rectangle(newlen, newlen)
{}square::square(int newlen, int newwidth):
rectangle(newlen, newwidth)
int main()
if (fquit)
break;
sp->draw();
std::cout << "\n";
}return 0;
}
shape是一種抽象資料型別(adt),只為其派生類提供介面,如果試圖例項化shape物件,將很麻煩,也許應該使其不可能。
抽象資料型別表示一種概念(如形狀),而不是具體的物件(如圓)。在c++中,adt只能用於其他類的基類,而不能建立其實,因此,如果將shape宣告為adt就無法建立shape例項了。
18.2純虛函式
c++通過提供純虛函式來支援建立抽象資料型別。純虛函式是必須在派生類中重寫的虛函式。通過將虛函式初始化為 0 來將其宣告為純虛的。
任何包含乙個或多個純虛函式的類都是adt不能將其實例化,試圖這樣做將導致編譯錯誤,將純虛函式放在類中向其客戶指出以下兩點。
1.不要建立這個類的物件,應該使其派生。
2.務必重寫這個類繼承的純虛函式。
在adt派生而來的類中,繼承的純虛函式仍然是純虛的,要例項化的話,必須要對派生類中每個純虛函式,否則派生類也將是adt。
adt不能例項化如下:
#include using namespace std;
class shape
virtual ~shape() {}
virtual long getarea() // error
//virtual long getarea()=0;
virtual long getperim()
//virtual long getperim()=0;
virtual void draw() {}
//virtual void draw()=0;
};class circle : public shape
if (fquit)
break;
sp->draw();
std::cout << "\n";
}return 0;
}
抽象資料型別
本篇文章簡單的講解下表 棧 佇列。首先先了解一下什麼是抽象資料型別。它是這麼定義的 抽象資料型別 abstract data type,即adt 是帶有一組操作的一些物件的集合。那麼adt怎麼理解呢?首先你只需要記住表 集合 圖以及與他們各自的操作一起形成的物件都可以被看做抽象資料型別.這就跟整型 ...
C 抽象資料型別介紹
coder梁 id coder lt 我們在學資料結構的時候,經常遇到的乙個概念就是抽象資料型別 abstract data type 簡稱adt。維基百科中的定義是 抽象資料型別是電腦科學中具有類似dvipsvkx行為的特定類別的資料結構的數學模型,或者具有類似語義的一種或多種程式語言的資料型別。...
抽象資料型別 表
資料結構與演算法分析.c 實現 總結 抽象資料型別 abstract data type,首先顧名思義,她是一種資料型別,就像整數 字元,類似於加減乘除,他有自己的操作,例如 並和查詢 並沒有什麼法則規定一定要有什麼操作,具體的看設計要求 每種資料型別的實現方式也是不同的,主要有 陣列實現和鍊錶實現...