我来自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]
答案 0 :(得分:4)
参数传递在C ++中通过复制工作,并且没有隐式指针。因此,当您调用doPrint
时,它会从其参数中实现新的Base。如果要传递Derived实例本身,则必须通过指针或引用来执行此操作:
base &doPrint(base &obj)
// ^ ^
{
obj.print();
return obj;
}