通过指针访问虚拟类

时间:2019-07-17 11:55:24

标签: c++ inheritance polymorphism virtual abstract

我必须设计项目的特定体系结构。我在尝试创建指向虚拟类的指针时遇到了麻烦,并且遇到了段错误(似乎我的指针分配不正确)。 我在下面列出了我想做的事情的草稿。

// Class A has to be pure virtual. It will be inherited by many classes in my project.
class A: 
{
public:
 virtual void myFunction() = 0; 
}


// Class B implements the method from the class A
#include <A.h>
class B: public A
{
public:
void myFunction(); // IS IMPLEMENTED HERE!!
}


// Class C creates a pointer to the class A.
 #include <A.h>
class C:
{
A *ptr;
ptr->myFunction();  //Here I want to run myFuction() from the class B.
}

如何在这三个之间建立联系,所以我得到了想要的结果。 我无法更改体系结构,或者仅省略A,B或C类中的任何一个。 感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

虚拟调用允许通过基本类型的指针或引用从对象访问函数。请注意,对象本身必须是实现功能的类型。

因此,在C类中,您可以看到类似这样的内容:

B b;
A *ptr = &b;
ptr->myFunction()

A *ptr = new B();
ptr->myFunction()

无论哪种方式,都需要创建B类型的对象,并将其分配给A *类型的指针。