Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 传递对从抽象基类继承的类的引用_C++_Inheritance_Abstract Class - Fatal编程技术网

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

C++ 传递对从抽象基类继承的类的引用,c++,inheritance,abstract-class,C++,Inheritance,Abstract Class,我想传递一个指向从抽象基类继承的类的指针,但在下面(简化得多)的代码中会出现EXC_BAD_访问错误(在调用函数f()时) 如果基类不是抽象的,那么问题似乎就不存在了,但是我无法找出上面代码的错误。非常感谢您在解决此问题时提供的任何帮助,以及提出实现这种结构的不同方法 问题在于f()中的“指针[0]”最终访问B类的pointer成员,而不是A超类的pointer成员 在您的示例中,由于它没有初始化,所以它是未定义的行为 只需删除B中指针的声明,问题是f()中的“指针[0]”最终访问B类的指针成员

我想传递一个指向从抽象基类继承的类的指针,但在下面(简化得多)的代码中会出现EXC_BAD_访问错误(在调用函数f()时)

如果基类不是抽象的,那么问题似乎就不存在了,但是我无法找出上面代码的错误。非常感谢您在解决此问题时提供的任何帮助,以及提出实现这种结构的不同方法

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

在您的示例中,由于它没有初始化,所以它是未定义的行为

只需删除
B

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

在您的示例中,由于它没有初始化,所以它是未定义的行为

只需删除
B

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

在您的示例中,由于它没有初始化,所以它是未定义的行为

只需删除
B

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

在您的示例中,由于它没有初始化,所以它是未定义的行为


只需删除
B
pointer
的声明,就可以在类
B
中声明名为
pointer
的新数据成员。因此,类型为
B
的对象有两个名为
指针的数据成员:一个来自类
A
,一个来自类
B
。在类
B
中,您声明了一个名为
指针的新数据成员。因此,类型为
B
的对象有两个名为
指针的数据成员:一个来自类
A
,一个来自类
B
。在类
B
中,您声明了一个名为
指针的新数据成员。因此,类型为
B
的对象有两个名为
指针的数据成员:一个来自类
A
,一个来自类
B
。在类
B
中,您声明了一个名为
指针的新数据成员。因此,类型为
B
的对象有两个名为
pointer
的数据成员:一个来自类
A
,一个来自类
B
。谢谢,它工作了,我只需在受保护的中声明指针。谢谢,它工作了,我只需要在受保护的文件中声明指针。谢谢,它可以工作,我只需要在受保护的文件中声明指针。
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();