#include <iostream>
using namespace std;
class A
{
public :
void show()
{
cout << "A " << endl;
}
};
class B : public A
{
public :
void show()
{
cout << "B " << endl;
}
};
int main()
{
A *a =NULL;
a->show(); // Prints 'A'
B *b =NULL;
b->show(); // Prints 'B'
}
这是如何打印的,当我们从show
继承A
到B
时,如何使用show()
类对象调用B
?从A
继承B
时会发生什么?
答案 0 :(得分:1)
这是未定义的行为,但很多实现都会以您所看到的方式运行。考虑这个电话:
a->show();
编译器可以看到A没有基类,show()
不是虚拟的。因此,唯一可以调用的函数是A::show()
。好极了,调用它!您需要做的就是(如果您是编译器)将a
作为this
传递,即隐藏的函数的第一个参数。如果this
从未在函数中使用过,那么它很可能正常工作。
即便如此,这也不能保证工作,不可移植,并且是一个坏主意。不要这样做。你的裤子可能会燃烧。