传递对从抽象基类继承的类的引用

时间:2014-10-11 23:55:07

标签: c++ inheritance abstract-class

我想传递一个指向从抽象基类继承的类的指针,但是在下面(简化的)代码中得到一个EXC_BAD_ACCESS错误(当调用函数f()时)

class A {
    double *pointer;
public:
    A(double *p)
    {
        pointer = p;
    };
    virtual void f() = 0;
};

class B :public A{
    double *pointer;
public:
    B(double *p_) : A(p_){};
    void f(){std::cout << pointer[0] << std::endl;};
};

如果我给它打电话,例如像这样

 double p[2] = {1.,2.};
 B b(p);
 b.f();

如果基类不是抽象的,那么问题似乎不存在,但我无法弄清楚上面的代码有什么问题。任何帮助解决这个问题,并建议采用不同的方式来实现这种结构,非常感谢!

1 个答案:

答案 0 :(得分:3)

问题是f()中的“pointer [0]”最终访问pointer类的B成员,而不是pointer成员A成员超级。

由于它没有初始化,在你的例子中,它是未定义的行为。

只需删除pointerB的声明。