Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 解决重复代码的场景_Oop - Fatal编程技术网

Oop 解决重复代码的场景

Oop 解决重复代码的场景,oop,Oop,我在一次采访中被问到这个问题。 假设我有基类“A”。有四类“B”、“C”、“D”、“E”是从“A”派生出来的。现在我有一个方法,它在“D”类和“E”类中很常见。我编写这个方法的最小方法是什么,只有类“D”和“E”才能使用它们。 如果我在基类中编写它们,那么类“B”和“C”就可以无缘无故地看到它们。您从A派生出一个中间类,比如说,为了简单起见调用它DECommon,它将为D和E提供此通用方法。接下来从中派生出D和E class A { } class DECommon : public A {

我在一次采访中被问到这个问题。 假设我有基类“A”。有四类“B”、“C”、“D”、“E”是从“A”派生出来的。现在我有一个方法,它在“D”类和“E”类中很常见。我编写这个方法的最小方法是什么,只有类“D”和“E”才能使用它们。
如果我在基类中编写它们,那么类“B”和“C”就可以无缘无故地看到它们。

您从A派生出一个中间类,比如说,为了简单起见调用它
DECommon
,它将为
D
E
提供此通用方法。接下来从中派生出
D
E

class A {
}

class DECommon : public A {
     public:
        virtual void newMethodDE() {
            // DO YOUR MAGIC HERE
        }
}

class D : public DECommon {
}

class E : public DECommon {
}

因此,D和E仍将保持与a的is-a关系,而新公共方法的逻辑将只在
DECommon
中间类中实现一次。

您可以从A派生一个中间类,也就是说,为了简单起见调用它
DECommon
,它将对
D
E
使用此公共方法。接下来从中派生出
D
E

class A {
}

class DECommon : public A {
     public:
        virtual void newMethodDE() {
            // DO YOUR MAGIC HERE
        }
}

class D : public DECommon {
}

class E : public DECommon {
}

因此,D和E仍将保持与a的is-a关系,而新通用方法的逻辑将在
DECommon
中间类中只实现一次。

很高兴您喜欢它,请随意接受答案:)很高兴您喜欢它,请随意接受答案:)您可以将其放入具有私有范围的包中(对于java而言)。然后将D、E放入同一个包中,将B、C放入不同的包中。也可以引入类似的函数,它是独立的对象,只将其用作D和E类的成员。您可以将其放入具有私有范围的包中(对于java而言)。然后将D,E放入同一个包中,将B,C放入不同的包中。也可以引入类似的函数,它是独立的对象,只将其用作D和E类的成员。