【发布时间】:2018-04-06 19:35:17
【问题描述】:
我目前正在尝试将类 (myClass) 的成员设置为基类的某些派生类 (Derived1、Derived2...)。由于类不知道是哪个派生类,所以成员类型设置为基类,构造时才设置为派生类。
派生类都有一个共同的成员函数,但实现方式不同(基类有一个虚拟版本)。但是,当从 myClass 调用 this 函数时,它总是调用基类版本而不是派生类。
class Base
{
public:
Base(){}
virtual void who() { cout << "this is Base"; }
}
class Derived1 : public Base
{
public:
Derived1() : Base() {}
void who() { cout << "this is Derived1"; }
}
class myClass
{
private:
Base unknownDerived;
public:
myClass(const Base& inputDerived) { unknownDerived = inputDerived; }
void whosthere() { unknownDerived.who(); }
}
上面的输出是“this is Base”,而是调用了 Base 类版本。
有没有办法在不指定实际派生类的情况下包含成员,但能够调用其特定函数( who() )?
非常感谢!
【问题讨论】:
-
您没有展示如何运行此代码。请包括
main -
你的unknownDerived 是sliced
-
@MadPhysicist 主要是
myClass test; test.whosthere(); -
@Kevin 有没有办法避免这种情况?因为确切的派生类在构造之前是未知的
-
@alam。我没有看到一个空的构造函数。
标签: c++ virtual base derived-class