无法获取派生类成员的值
Can`t get value of member of derived class
我有:
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..
}
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 如何使用基类指针引用派生类成员
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 在 C++ 中用派生类型重写成员函数
- 如果基类包含双指针成员,则派生类的构造函数
- 在派生类中绑定非静态模板化成员函数
- 为什么派生类的好友不能使用受保护的成员?
- 在派生类中使用基类的私有成员变量的最佳方法
- 派生类如何获取基的成员?
- 如何将成员函数作为参数传递并在派生对象上执行方法列表
- 调用派生类成员函数
- 从模板化父类中的派生内部类访问受保护的成员变量
- 将基类的成员函数重载到其他派生类C++
- 派生的成员 通过指向基、static_cast、crtp、删除模板的指针
- C++ 使用派生类方法更改基类数据成员
- 派生类看不到基类成员
- 使用派生类中的静态成员而不是基类
- 是否可以使用 using 将基类中的公共成员重新声明为派生类中的私有成员?
- 如何将派生类中的成员函数作为回调传递?