无法获取派生类成员的值

Can`t get value of member of derived class

本文关键字:成员 派生 获取      更新时间:2023-10-16

我有:

VirtualClass : public QObject
{
public:
    int m_number;
}
DerivedClass : public VirtualClass 
{
public:
    DerivedClass(int number) : m_number(number) {};
    int m_number;
    // some content goes here..
}

客户端代码:

f(VirtualClass* instance)
{
std::cout << instance->m_number;
}
DerivedClass der(100);

我希望f(der)返回与衍生类相关的m_number,但*我得到m_number虚拟类*。我做错了什么?!!

DerivedClass中删除int m_number;。否则,您必须对不同的m_number成员。一个来自VirtualClass,另一个来自DerivedClass

DerivedClass中添加int m_number;时,会隐藏m_number; VirtualClass

下面是它的工作原理示例:

struct Foo
{
    int a;
};
struct Bar : Foo
{
    int a; //another a
};
int main()
{
    Bar *f = new Bar();
    f->a = 10; //Bar::a
    Foo *b = f;
    b->a = 20; //Foo::a
    cout << f->a << endl; //prints 10
    cout << b->a << endl; //prints 20
}

你已经声明了两次int m_number;。您只应声明一次。

spin_eight:如果需要,可以通过在 VirtualClass 上提供适当的构造函数并从派生的初始值设定项列表中调用它来保留初始值设定项列表,如下所示:

VirtualClass : public QObject 
{ 
 public: 
 VirtualClass(int number) : m_number(number) { }
 int m_number; 
}
DerivedClass : public VirtualClass
{
 public: 
 DerivedClass(int number) : VirtualClass(number) {}; 
 // some content goes here.. 
}