私有非虚拟基类函数被称为派生类中的函数
Private non-virtual Base class function is called instead of the one in Derived class
class Base{
public:
void callF(){ F(); }
private:
void F(){}
};
class Derived: public Base{
public:
void F(){}
};
int main(){
Derived d;
d.callF();
}
对我来说,base f()被调用。我不明白为什么。f()在基类中声明并定义为私有,因此派生的对象甚至都不知道基本中这种函数的存在。派生类有自己的F(),但该功能被忽略。问题是"为什么要拨打F()基类?"。
它是这样的。
- 调用
Base::callF
功能。它是公开的,因此将其称为forommain
。
没有问题 -
Base::callF
功能要调用名为F
的函数。Base::callF
可见的唯一F
是Base::F
。它是私人的,但是callF
是Base
的成员,因此它可以看到并使用所有其他成员,包括私人成员。 -
Derived::F
函数与此功能无关。这只是与Base::F
无关的另一个功能,恰好具有相似的名称。
我不确定是否回答您的问题
问题是"为什么f()为何呼叫?"。
那是因为在派生类中只能覆盖virtual
函数(动态多态性 1 ),除非您使用CRTP(静态多态性 1 ):
template<class Derived>
class Base{
public:
void callF(){ static_cast<Derived*>(this)->F(); }
private:
void F(){}
};
class Derived: public Base<Derived>{
public:
void F(){}
};
否则
void callF(){ F(); }
等于
void callF(){ Base::F(); }
1)另请参见编译时间多态性和静态绑定之间有什么区别?
相关文章:
- 在派生函数中指定void*参数
- 使用 std::variant<...时调用 BaseState 函数而不是派生函数>
- 从基类数组调用派生函数
- 我设计了一个类并创建了基指针,但是当我尝试通过基指针访问派生函数时,它会出错
- c++ 在派生函数中启动 OMP 线程
- 派生函数的映射
- NIST SP 800-56A 串联/单步密钥派生函数的现有实现
- C++从基类实例调用派生函数
- c++多态性-使用基指针访问派生函数
- 派生函数中的NULL实现
- 与派生函数参数绑定
- 从基类派生函数
- 继承和使用派生函数
- 在列表对象中使用对象的派生函数
- 当派生函数定义了析构函数时,使用复制函数而不是移动函数
- 使用基类的派生函数
- 为什么调用基类函数而不是派生函数
- 多重继承派生类:如何在不重复调用 base 的情况下重用派生函数
- 试图与 Base 中的派生函数交朋友 - 为什么它不起作用?
- 在继续派生函数之前先执行基函数