C ++中的简单继承问题

时间:2011-07-04 15:35:41

标签: c++ inheritance

我正在尝试正确理解C ++中的继承。

首先,有一个类可以返回自身的实例吗?

class Class1 {
public:   
   Class1 foo();
}

基本上,我有一个派生方程的类,所以它取一个方程并返回一个方程式。

如果我想要Class1的一些子类也返回自己的实例:

class Child : public Class1 {
public:
   Child bar();
}

我想使用Class1的一些函数但是不想返回Class1,我想返回Child对象,这是否可以继承?

谢谢,希望这个问题不是太愚蠢。

3 个答案:

答案 0 :(得分:1)

是,

在我看来,你被描述为一个明确定义的问题,在Desing Pattern的说法中称为Factory

请考虑以下事项:

class Class1 {
public:   
   static Class1 * getInstance( Equation * eq );

   virtual void foo() = 0;
}

class Child : public Class1 {
public:
   virtual void foo();
}

class OtherChild : public Class1 {
public:
   virtual void foo();
}

对于两个孩子,你将以不同的方式实现foo()方法。

所以,例如,你可以:

int main(){

   Equation myEquation("x=y/4");

   Class1 * myInstance = Class1::getInstance ( &myEquation );

   myInstance->foo(); //would call the virtual method of the child class. You don't care what subclass, this was figured out by the "getInstance" method.

}

答案 1 :(得分:1)

如上所述,没有问题,但您打算如何使用它。返回 按价值涉及复制,复制和多态通常不会 好在一起。通常(但也有例外),它更可取 返回指向新分配的实例的指针。 (你必须解决 如果你这样做,内存管理问题。如果是逻辑意义的话 类是循环是不可能的,那么你可以使用 std::shared_ptr;否则,你将不得不做别的事情。)

答案 2 :(得分:0)

  

首先,有一个课可以   返回自身的实例?

是的,没关系,在你的情况下,它听起来像一个很好的设计。您可以使用您提议的设计,或者您可以使用不同的设计,您的类将返回不同的对象,例如class DerivedEquation,或者您还可以拥有class Deriver Equation并返回Equation。所有这些设计都很好。

  

如果我想要一些Class1的子类   也返回实例   他们自己也想用一些   Class1的功能,而不是   返回Class1,我想   返回Child对象,这会是什么   继承可能吗?

那也没关系。您可以像提议的那样拥有Class1::foo()Child::bar()。此外,如果您不想拥有2个不同的函数名称,则可以将foo的定义更改为Class1 * foo()Class1 & foo(),然后您就可以在Child中重载它{1}}。