c++基礎(繼承)

Cplusplus-tutorial-in-hindi.jpg
面向物件中三個特性之一的繼承,可能是許多人職責OO的一點,高耦合度,所以大家都推崇組合(也叫內聚)而非繼承。繼承是子從父頁,設計繼承是處於消除程式碼 copy。其實面向物件設計不是讓我們把真實世界抽象為物件來表示出來,面向物件思想是我們設計程式,組織程式碼的方案。
#include <iostream> class Entity { public: float x, y; void Move(float xa, float ya) { x += xa; y += ya; } }; class Player : public Entity { public: const char *name; }; int main(int argc, char const *argv[]) { Player p; p.Move(5, 5); std::cin.get(); }
這是 c++ 中繼承方式,繼承背後究竟發生什麼了,現在 player 的例項就具有兩種型別 Player 型別和 Entity 型別,在 c++ 中型別是比較複雜的,要想完全理解 c++ 的型別系統還需要話費精力和時間。
class Player : public Entity
其實可以 Player 理解為 Entity 擴充套件,其實擴充套件應該別繼承更加貼切,Player 也是 Entity 的超集,就像 typescript 是 javascript 超集語言,typescript 擁有所有 javascript 的語言特性。
std::cout << "size of Entity: " << sizeof(Entity) << std::endl; std::cout << "size of Player: " << sizeof(Player) << std::endl;
size of Entity: 8 size of Player: 16
如果 Player 沒有繼承 Entity 在大小是由 const char *name;
佔 4 個位元組,再加之擁有 Entity 所佔 8 位元組就是 12 位元組,注意這裡 const char *name;
是指標所以是 4 位元組。