繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM