基类指针不会看到派生的成员

时间:2015-11-21 11:42:21

标签: c++ inheritance polymorphism

这是我的代码。我不明白为什么我没有使用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

1 个答案:

答案 0 :(得分:2)

继承向另一个方向发展。

指向Derived对象的指针可以看到Base成员,但指向Base的指针无法看到Derived成员。数据成员没有virtual,即使对于函数,只有在Base中声明它才是虚拟的。 (virtual允许您通过Base指针或引用访问函数的派生版本。)

由于您想要的成员在那里,即使无法以这种方式访问​​,您也可以使用static_cast来访问它:

static_cast<Derived*>(b)->x = 3;