返回基类而不是派生类c ++的方法

时间:2014-11-11 16:05:52

标签: c++ polymorphism

我来自C#背景,所以我希望这是有道理的。

我有一个基类和一个派生类。我希望能够定义一个方法,该方法对从基类派生的任何类进行操作,然后返回对象本身。这是一个例子:

class base
{
public:
    virtual void print()
    {
        cout << "Base" << endl;
    }
};

class derived : public base
{
public:
    void print()
    {
        cout << "Derived" << endl;
    }
};

int main()
{
    derived a;
    a.print();
    base b = doPrint(a);
    b.print();
}

base doPrint(base obj)
{
    obj.print();
    return obj;
}

我得到的输出是

Derived
Base
Base

我想得到的是“Derived \ n Derived \ n Derived”,即我希望该对象一直被视为Derived类。这很重要,因为它可以返回从base派生的任何类。

我该怎么做?它与泛型类有关吗?

由于

[编辑]这可以通过将“doPrint”方法放入具有我可以指定为派生类的泛型类的类来完成吗?“[/ Edit]

1 个答案:

答案 0 :(得分:4)

参数传递在C ++中通过复制工作,并且没有隐式指针。因此,当您调用doPrint时,它会从其参数中实现新的Base。如果要传递Derived实例本身,则必须通过指针或引用来执行此操作:

base &doPrint(base &obj)
//   ^            ^
{
    obj.print();
    return obj;
}