3 13 以類取代型別碼

2021-09-07 14:10:39 字數 2245 閱讀 4252

源**

1 #include 2 #include 3

4class

student512

13int

getid()

1417

void setid(int

id)18

2122

qstring getname()

2326

void

setname(qstring name)

2730

31int

getstatus()

3235

void setstatus(int

status)

3639

40qstring tostring()

4145

46public:47

static

const

intinvalid;

48static

const

intvalid;

4950

private:51

intm_nid;

52qstring m_name;

53int

m_status;

54};

5556

const

int student::invalid = 0;57

const

int student::valid = 1;58

59void

main()

6064

65//

run out:

66/*

67* "student [id = 1, name = 張三, status = 1]"

68*/

以類取代型別碼

1 #include 2 #include 3

4class

statuscode510

11int

getcode()

1215

16void setcode(int

code)

1720

21qstring tostring()

2225

26private:27

intm_ncode;

28};

2930

class

student

3138

39int

getid()

4043

void setid(int

id)44

4748

qstring getname()

4952

void

setname(qstring name)

5356

57statuscode getstatus()

5861

void

setstatus(statuscode status)

6265

66qstring tostring()

6771

72private:73

intm_nid;

74qstring m_name;

75statuscode m_status;

76};

7778

void

main()

7983

84//

run out:

85/*

86* "student [id = 1, name = 張三, status = statuscode [code = 1]]"

87*/

總結

類中有乙個數值型別碼,但它並不影響類的行為。以乙個新的類替換該數值型別碼。

在使用replace type code with class (以類取代型別碼)之前,你應該先考慮型別碼的其他替換方式。

只有當型別碼是純粹資料時(也就是型別碼不會在switch語句中引起行為變化時),你才能以類來取代它。

更重要的是:任何switch語句都應該運用replace conditional with polymorphism (以多型取代條件表示式)去掉。

為了進行那樣的重構,你首先必須運用 replace type code with subclass (以子類取代型別碼)或replace type code with state/strategy (以狀態策略取代型別碼),把型別碼處理掉。

good good study, day day up.

順序 選擇 迴圈 總結

5 15 以測試取代異常

原 1 double getvalueforperiod int periodnumber 27 catch arrayindexoutofbound ception e 811 以測試取代異常 1 ouble getvalueforperiod int periodnumber 27 8retur...

6 11 以委託取代繼承

原 1 class sanitation 28 910class child public sanitation 11 以委託取代繼承 class child string washhands private sanitation m psanitation 具有委託物件 sanitation 的例...

6 11 以委託取代繼承

原 1 class sanitation 28 910class child public sanitation 11 以委託取代繼承 class child string washhands private sanitation m psanitation 具有委託物件 sanitation 的例...