1. 程式人生 > >對《寫給大家看的面向物件程式設計書》的一點收穫

對《寫給大家看的面向物件程式設計書》的一點收穫

最近讀了matt weisfeld寫的《寫個大家看的面向物件程式設計書》,這本書主要講了面向物件的一些主要的思想。側重於向讀者解釋面向物件中的一些概念和思想。

我對面向物件的一些認識:面向物件主要是來自與人類世界自己的一種思考方式,當我們考慮一個事物時,一般是將事物作為一個物件進行思考。其中物件有自己的一些屬性,同時也有自己的一些行為。這體現在面向物件中主要有,多型性,虛擬函式,繼承,組合,隱藏,介面和實現等等

以下將對這其中的重要的一些觀點進行介紹

多型性:指對於同一個訊息,不同的物件對於此訊息會有不同的結果,即多種形態的意思。如畫出一些圖形,對於同一個draw方法,在circle,star,square中的實現方法各不相同,對於這個圖形訊息,會得到不同的影象。、

繼承:它是面向物件中最重要的一個結果。即表現為子類繼承超類(父類)的屬性和方法,是一種is-a的關係,這樣在構建一個新的物件時,會帶來極大的方便性。如狗和貓都是哺乳動物,可以建立一個哺乳動物的超類,這樣在建立狗物件和貓物件時就會帶來很大的方便性。

組合:一個物件包含其他物件,是has-a的關係。如汽車包含了輪胎、發動機等等。它和繼承還是有很大的區別的

虛類:包含虛擬函式的類,是不能被例項化的

虛擬函式:不能提供實現的函式,可以再繼承中實現。是實現多型的基礎。

類中的三種屬性:public,protect,private,其中的private實現了隱藏,即只有自己的類和子類才能訪問它,其他的類沒有訪問的許可權。

一般來說,最好的設計就是竟可能的隱藏細節,提供竟可能少的介面。


如上圖中的繼承關係和一些虛擬函式的一些關係,是VS2010中的類的檢視。

shape類的宣告

#pragma once
#include <iostream>
class shape
{
public:
shape(void);
~shape(void);
virtual void draw();
};

circle的定義

#include "StdAfx.h"
#include "circle.h"
#include "shape.h"


circle::circle(void)
{
}




circle::~circle(void)
{
}


void circle::draw()
{
std::cout<<"i am drawing circle"<<std::endl;
}