c++ - 从“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。
解决方案
使用您当前对 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 的孩子,并且会包含额外的变量和函数)。
希望清除它。
推荐阅读
- python - TypeError:“PhotoImage”对象不可调用 - Python Tkinter
- python-3.x - 使用 Pymc3 glm 的样本外后验和线性预测
- javascript - 如何更新我的功能以显示每秒滴答的时钟
- javascript - 同一个函数内的settimeout
- python - 为什么引号在错误消息上重复?
- asp.net - 登录后立即过期的 ASP.NET 会话
- html - 我在搞乱特异性吗?这是怎么回事?
- wordpress - 如何对需要注册的网站进行压力测试
- c - 如何找到每个大小为 n 的 m 个数组的最长公共子数组?
- c++ - Visual Studio C++ 2019。如何将 wstring 转换为 WCHAR *