class的繼承與組合問題 |
尚未結案
|
brian_chen
一般會員 發表:14 回覆:20 積分:6 註冊:2007-06-26 發送簡訊給我 |
在c++的書上看到有關繼承與成員函數的擴充功能
但有一些問題 <textarea cols="60" rows="10" class="cpp" name="code">
class library_object
{
protected:
char name[30];
long index;
public:
void set_data (const char *i_name)
{
.....
strcpy(name,i_name);
index = 1;
}
};
</textarea> 使用取代功能 (不符合程式碼再用的精神)
<textarea cols="60" rows="10" class="cpp" name="code">
class Book : public libary_object
{
private:
bool on_shelf;
public:
void set_data(const char* name)
{
.....
strcpy(name,i_name);
index = 1;
on_shelf = true;
}
};
</textarea> 使用擴充功能 (符合程式碼在用的精神)
<textarea cols="60" rows="10" class="cpp" name="code">
class Book : public libary_object
{
private:
bool on_shelf;
public:
void set_data(const char* name)
{
library_object::set_data(i_name);
on_shelf = true;
}
};
</textarea> 問題來了,如果有另一個Book2的class如下
<textarea cols="60" rows="10" class="cpp" name="code">
class Book2 : public libary_object
{
private:
bool on_shelf;
public:
void set_data(const char* iname)
{
.....
strcpy(name,i_name);
switch (name)
{
...
}
index = 1;
}
};
</textarea> 比如說 switch 一定要放在 index = 1 前面....
這樣子,要如何利用擴充功能改寫set_data
還是,book2只能使用取代功能重新寫set_data這個function --------------------------
因為想儘量增加程式碼的reuse
所以想到,如果一大段程式碼都相同,但中間必需要插入一段判斷式或是參數設定時
要如何不用再去寫一大段相同的程式碼....
書上寫的我懂,但好像只限於子class的新增部份只能插在前方或後方(以不更動父class中的function為主)
編輯記錄
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |