面试题答案
一键面试实例化过程
Final
类实例化:当实例化Final
类时,由于Final
继承自Middle<int>
,这会触发Middle
模板类的实例化。Middle
模板类参数被确定为int
,即Middle<int>
被实例化。Middle
模板类实例化:Middle<int>
实例化时,因为Middle
继承自Base<T, T*>
,此时T
被确定为int
,所以Base<int, int*>
会被实例化。
调用Base
类中的func
函数
在Final
类中,可以通过以下方式调用Base
类中的func
函数:
class Final : public Middle<int> {
public:
void callBaseFunc() {
Base<int, int*>::func(0, (int*)nullptr);
}
};
在Final
类的成员函数callBaseFunc
中,使用Base<int, int*>::func
来调用Base
类中的func
函数,并传递合适的参数。因为Base
类是Final
类的间接基类,所以需要通过限定名称的方式调用。如果Final
类中有其他成员函数,可以类似地在这些成员函数中进行调用。如果在Final
类的非成员函数中调用,需要先获取Final
类的实例对象,然后通过对象来调用,例如:
void nonMemberCall() {
Final f;
f.Base<int, int*>::func(0, (int*)nullptr);
}