【问题标题】:pass reference to class inherited from abstract base class传递对从抽象基类继承的类的引用
【发布时间】:2014-10-11 23:55:07
【问题描述】:

我想传递一个指向从抽象基类继承的类的指针,但在以下(非常简化的)代码中得到 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();

如果基类不是抽象的,问题似乎不存在,但我无法弄清楚上面的代码有什么问题。非常感谢您对解决此问题的任何帮助,并可能提出一种不同的方式来实现这种结构!

【问题讨论】:

  • B 类中,您声明了一个名为pointer 数据成员。因此,B 类型的对象有 两个 数据成员,称为 pointer:一个来自类 A,一个来自类 B

标签: c++ inheritance abstract-class


【解决方案1】:

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

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

只需删除Bpointer的声明即可。

【讨论】:

  • 谢谢,它有效,我只需要在 A protected 中声明指针。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-26
  • 2010-10-10
相关资源
最近更新 更多