首页 > 解决方案 > 从“A”类到“B”类的无效转换

问题描述

 #include <iostream>
 using namespace std;
 class A
 {
    public:
    virtual void fun()
   {
      cout<<"in class A";   
   }
 };
 class B: public A
 {
    public:
    void fun()
   {
      cout<<"in class B";   
   }
 };
 int main()
 {
     B *b1;
     A a1;
     b1  = &a1;
     b1->fun();
 }

我得到错误

从“A”到“B”的无效转换

我在基类中使用虚函数。我正在创建指向 B 类的指针并将对象 A 的地址存储在 B 类对象中,并尝试调用 B 类中的函数。

我正在使用 devc++ IDE。

标签: c++oop

解决方案


使用您当前对 A 和 B 类的实现,下面的方法可以正常工作。

 main()
 {
     B b1;
     A *a1;
     a1 = &b1;
     a1->fun();
 }

原因是,A 是父母,B 是孩子。让我们记住 OOP 的封装属性,它告诉我们一个类包含作为单个实体封装的变量和函数。

现在,A 是一个包含名为“fun”的函数的实体。让我们称之为 funA 以避免混淆。而B通过继承包含了A的所有变量和函数,还包含了另一个函数“fun”,我们称之为funB。

现在,当您尝试执行 A = B,即尝试将“B”对象的引用放在“A”类型变量中时,它不会出错,因为“A”知道内存结构或变量它们继承自“A”并存在于“B”类型对象中。

但是,B = A 将不起作用,因为在“A”类型对象中,“B”引用将无法找到应该存在的变量和函数。(因为 B 是 A 的孩子,并且会包含额外的变量和函数)。

希望清除它。


推荐阅读