[英]Base Class Pointer doesn't see members of Derived
这是我的代码。 我不明白为什么我不使用b->x
;
主程序
#include <iostream>
#include "Nesne.h"
using namespace std;
int main()
{
Derived obj;
Base *b=&obj;
b->a=2;
b->x=3;
return 0;
}
Nesne.h
#ifndef NESNE_H
#define NESNE_H
class Base
{
public:
int a;
Base();
virtual ~Base();
protected:
private:
};
class Derived : public Base
{
public:
int x;
Derived(){};
};
#endif // NESNE_H
继承朝着另一个方向发展。
指向派生对象的指针可以看到基类成员,但指向基类的指针看不到派生成员。 数据成员没有virtual
,即使对于函数,只有在 Base 中声明时它才会是虚拟的。 (虚拟允许您通过基指针或引用访问函数的派生版本)。
由于您想要的成员在那里,即使无法通过这种方式访问它,您也可以使用static_cast
来访问它:
static_cast<Derived*>(b)->x = 3;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.