我有一个基类多态性与第3级的继承基类的shared_ptr
class Base {
public:
virtual void func() = 0;
}
我有一个具体的派生类
class Derived : public Base {
public:
void func() {func2();}
void func2() {};
}
最后,我有一个派生类
class DerivedDerived : public Derived {
// inherits func() from Derived
void func2() {} //Overrides func2() from Derived
}
void g(shared_ptr<Base> s) {
s->func();
}
现在,我的问题是这样的:我有一个函数g(),需要一个shared_ptr <基地>并且调用func()而没有任何类型转换,因为它不知道任何子类。 现在,如果我做的:
shared_ptr<Base> s1 = make_shared<Derived>();
shared_ptr<Base> s2 = make_shared<DerivedDerived>();
g(s1); //func() of Derived Class called
g(s2); //func2() of Derived Class called inside, func2() of DerivedDerived Class needed to be called inside.
我想正确的类的FUNC()调用FUNC2(),我..
什么是问题?没有调用正确的函数吗?你有构建错误吗?崩溃?意外的结果?请详细说明。你有*试过吗?也许你甚至有一个[最小,完整和可验证的例子](http://stackoverflow.com/help/mcve),你可以告诉我们? –
也让'Derived :: func2()''virtual'。 – songyuanyao
*“void func2(){} //覆盖派生”*“中的func2()。不,你只是**隐藏**因为func2不是'虚拟的'。 – Jarod42