面试题答案
一键面试- 调用方法:在派生类B的成员函数内,通过作用域解析运算符
::
来调用基类A的func()
函数。即使用A::func();
来调用。 - C++类作用域规则:
- 当在派生类中定义了与基类同名的成员函数时,派生类的成员函数会隐藏基类中的同名成员函数(这被称为函数隐藏规则)。这意味着在派生类的作用域内,直接调用该函数名会调用到派生类自己定义的函数。
- 作用域解析运算符
::
可以用来访问基类作用域中的成员,从而明确调用基类的同名函数。
- 代码示例:
#include <iostream>
class A {
public:
void func() {
std::cout << "This is A's func()" << std::endl;
}
};
class B : public A {
public:
void func() {
std::cout << "This is B's func()" << std::endl;
}
void callAFunc() {
A::func();// 调用基类A的func()
}
};
int main() {
B b;
b.func();// 调用B的func()
b.callAFunc();// 调用A的func()
return 0;
}
在上述代码中,B
类继承自 A
类,并且都有 func()
函数。在 B
类的 callAFunc()
成员函数中,使用 A::func();
来调用基类 A
的 func()
函数。在 main
函数中,先调用 b.func()
调用的是 B
类的 func()
,再调用 b.callAFunc()
调用的是 A
类的 func()
。