C++ 调用上层类成员C++;

C++ 调用上层类成员C++;,c++,inheritance,C++,Inheritance,因此,假设我有: Class A { void A::DoSomething(); A::A() }; Class B : public A { void B::DoSomething(); B::B() } Class C : public A { void C::DoSomething(); C::C() } B obj1; C obj2; void RemoveObjectFromListOrSomethingSimiliar(A objToLookFor) { //assumin

因此,假设我有:

Class A
{
void A::DoSomething();
A::A()
};

Class B : public A
{
void B::DoSomething();
B::B()
}

Class C : public A
{
void C::DoSomething();
C::C()
}

B obj1;
C obj2;

void RemoveObjectFromListOrSomethingSimiliar(A objToLookFor)
{
//assuming you found the object, how would you call the top-level DoSomething() (for example B::DoSomething() ) instead of the A::DoSomething()?
}
我不确定这是否有意义

[编辑] 好的,这样就可以了。尽管它仍然重定向到基本方法,这让我很困惑

B obj1;
c obj2;
AList.push_back(obj1);
AList.push_back(obj2);

//later, in another method:

A objInBack = AList.back();
objInBack.DoSomething();

AList.pop_back();

objInBack引用类结构的A级别,并随后调用该级别的DoSomething()。我已经将A的方法更改为virtual,那么是否有明确定义执行级别的方法呢?

我将声明
DoSomething
virtual,并将其命名为
objToLookFor.DoSomething()


顺便说一句,您的
RemoveObjectFromListOrSomethingSimiliar
可能需要接受
A*
作为参数,而不仅仅是
A
,我不确定您的问题是否正确,但我想您需要的是动态绑定

下面是一个基于伪代码的示例

#include <iostream>

class A
{
    public:
        A() {}
        virtual void DoSomething() { std::cout << "A did something!" << std::endl; }
};

class B : public A
{
    public:
        B() {}
        void DoSomething() { std::cout << "B did something!" << std::endl; }
};

class C : public A
{
    public:
        C() {}
        void DoSomething() { std::cout << "C did something!" << std::endl; }
};

void DoSomethingWithSomething(A* ptr)
{
    ptr->DoSomething();
}

int main()
{
    A* obj1 = new A();
    A* obj2 = new B();
    A* obj3 = new C();
    B* obj4 = new B();
    C* obj5 = new C();

    DoSomethingWithSomething(obj1);
    DoSomethingWithSomething(obj2);
    DoSomethingWithSomething(obj3);
    DoSomethingWithSomething(obj4);
    DoSomethingWithSomething(obj5);
}

发布我的编辑就像你发布这个一样。我相信你所做的正是我所需要的。谢谢
A did something!
B did something!
C did something!
B did something!
C did something!