c 類的繼承和多型例子

2022-08-16 00:27:20 字數 1590 閱讀 1443

以上個動態銀河系的製作為例,假設我們定義了乙個星星的類如下:

class

star

~star(){}

void

init();

void

move();

protected

:void

draw();

void

newpos();

void

remove();

double m_x = 0

;int

m_y;

double

m_step;

intm_color;

};void

star::init()

else

m_y = rand() %screen_height;

m_step = (rand() % 5000) / 1000.0 + 1

; m_color = (int)(m_step * 255 / 6.0 + 0.5); //

速度越快,顏色越亮

m_color =rgb(m_color, m_color, m_color);

}void

star::move()

void

star::draw()

void

star::newpos()

void

star::remove()

接下來我們被要求製作乙個矩形的星星我們該怎麼做,其實矩形星星和上述的差別就在於draw()和romove()這兩個函式,所以我們可以利用類繼承的方法來實現,再使用同函式名覆蓋的方法來寫類,有三種繼承的方式如下表所示:

派生方式

基類的public成員

基類的protected成員

基類的private成員

派生方式引起的訪問屬性變化概括

private派生

變為private成員

變為private成員

不可見基類中的非私有成員都成為派生類中的私有成員

protected派生

變為protected成員

變為private成員

不可見基類中的非私有成員在派生類中的訪問屬性都降一級

public派生

仍為public成員

仍為protected成員

不可見基類中的非私有成員在派生類中的訪問屬性保持不變

所以在這裡我們採用public繼承的方式,只是把其中的類方法改變即可(這裡我們注意在基類中資料並不是private型別,因為若是private類不管子類是什麼方式繼承都是不可以呼叫的就算是使用同名函式進行過載):

class rectstar : public

star

~rectstar(){}

void

move()

protected

:void

draw();

void

remove();

}; void

rectstar::draw()

void

rectstar::remove()

C 繼承和多型

在c 的物件導向的大家庭裡,我感覺繼承算是很重要的了,因為有很多的東西都是依賴於繼承和多型的,所以單獨的在第三篇部落格裡做總結和昇華。繼承在面相物件的地方是乙個很是重要的東西,可以說在物件導向的世界裡沒有了繼承就沒有了這麼多的東西,而沒有了多型就沒有了多彩的世界。類的繼承是最為普遍的事情了,可是類又...

C 繼承和多型

剛學習了c 繼承和多型,對virtual override seal override new有點了解,在此寫下這篇文章以供以後參考,若有錯誤或不足,還望各位指出。這裡有3個類,分別是grandfather father son。好,我們現在來分析一下grandfather的遺產怎麼讓father繼...

C 繼承和多型

繼承是使 復用的一種機制。本質 單繼承 乙個派生類乙個基類派生。多繼承 乙個派生類有兩個人或者多個基類。如 馬與驢雜交所生的騾子就有兩個基類,騾子既繼承了馬的一些特徵,也繼承了驢的一些特徵 構造派生類包括 1 從基類接收成員 派生類接收基類的全部成員,沒有選擇 2 調整從基類接收的成員 可以改變基類...