【问题标题】:Accessing virtual class through the pointer通过指针访问虚类
【发布时间】:2019-11-26 06:01:00
【问题描述】:

我必须设计项目的具体架构。我在尝试创建指向虚拟类的指针时卡住了,并且遇到了分段错误(似乎我的指针没有正确分配)。 下面是我正在尝试做的草稿。

// 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 类。 感谢您的帮助!

【问题讨论】:

  • A* ptr = new B?看来您可以使用 a good book or two to read 来更新 C++。
  • 你所有的声明都是错误的,这不能编译。而A *ptr; ptr-&gt;myFunction();:ptr 无处可去,所以在某种程度上预计会出现段错误。
  • “似乎我的指针没有正确分配”它没有被分配(初始化)根本
  • 了解 C++ 中的 polymorphism 是什么。也尽量不要使用原始指针。在这种情况下,您似乎可以使用unique_ptr
  • // IS IMPLEMENTED HERE!!: 不,它不是,它只是被声明的。

标签: c++ inheritance polymorphism virtual abstract


【解决方案1】:

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

所以,在 C 类中,你可以有类似的东西:

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

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

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

【讨论】:

  • 亲爱的保罗,非常感谢您的友好和富有启发性的回应。第二个解决方案正是我想要的!
猜你喜欢
  • 2015-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
相关资源
最近更新 更多