关于子类继承父类函数原理的问题
各位大侠好
最近由一个简单的case引发了一点思考,想请各位指点指点
#include <iostream>
using namespace std;
class Base
{
public:
void f()
{
cout << "Base::f" << endl;
}
};
class Derived : public Base
{
public:
void f()
{
cout << "Derived::f" << endl;
Base::f();
}
};
int main()
{
Derived d;
d.f();
d.Base::f();
return 0;
}
这是个很简单的case,子类Derived和父类Base都有成员函数f()
根据C++标准,如果子类定义了同名成员函数,则将会覆盖父类中的定义。但根据这个case,在子类Derived定义了f()之后,一样是可以引用父类Base中的f()的,不过必须在前面加上类名Base,而且在该代码中甚至在main函数中使用了d.Base::f()
针对于以上现象,想请教下
1. 子类Derived中定义的所有函数与变量,是否在编译中默认在前面增加this,比如此例中Derived定义的f(),实际上是this->f()
2. 为什么在编译过程中,子类可以覆盖父类定义的同名函数
3. 如果在子类Derived中要使用父类Base中定义的f(),要写为Base::f(),是否意味着父类名Base本身是命名空间
4. 为什么子类对象d,能够通过想调用成员函数一样,使用d.Base::f()来调用父类函数
5. 最重要的,类的继承本质是什么,它在编译时究竟是如何处理的