这是我的代码。我不明白为什么我没有使用b->x
;
的main.cpp
#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
答案 0 :(得分:2)
继承向另一个方向发展。
指向Derived对象的指针可以看到Base成员,但指向Base的指针无法看到Derived成员。数据成员没有virtual
,即使对于函数,只有在Base中声明它才是虚拟的。 (virtual允许您通过Base指针或引用访问函数的派生版本。)
由于您想要的成员在那里,即使无法以这种方式访问,您也可以使用static_cast
来访问它:
static_cast<Derived*>(b)->x = 3;