网站建设 大公司好,深圳市注册公司流程图,lovephoto wordpress,网络建设文章网站C笔记之虚函数重写规则、返回类型协变、函数的隐藏
code review! 文章目录 C笔记之虚函数重写规则、返回类型协变、函数的隐藏1.返回类型协变2.C中函数的隐藏 —— C Primer Plus #xff08;第6版#xff09; —— cppreference
1.返回类型协变 2.C中函数的隐藏
在C中笔记之虚函数重写规则、返回类型协变、函数的隐藏
code review! 文章目录 C笔记之虚函数重写规则、返回类型协变、函数的隐藏1.返回类型协变2.C中函数的隐藏 —— C Primer Plus 第6版 —— cppreference
1.返回类型协变 2.C中函数的隐藏
在C中函数的隐藏是指在派生类中定义了与基类中的函数名称相同但参数列表不同的函数从而隐藏了基类中的同名函数。这种情况下派生类中的函数将会隐藏基类中的同名函数使得在使用该函数时编译器将只看到派生类中的函数而忽略基类中的函数。
函数的隐藏在C中遵循以下规则
当派生类中的函数名称与基类中的函数名称相同但是参数列表不同包括参数类型、个数或顺序时基类中的函数会被隐藏。如果派生类中没有与基类中同名函数的情况下则不会发生隐藏基类中的函数会被正常继承到派生类中。如果希望在派生类中同时使用基类中的同名函数可以通过using声明来显式地引入基类函数例如using Base::functionName;。隐藏只在名称查找时发生而不会影响函数的重载。也就是说派生类可以定义与基类中同名但参数列表不同的多个函数它们不会相互隐藏。
以下是一个简单的示例展示了函数的隐藏 在这个示例中Derived 类中的 show(int x) 函数隐藏了基类 Base 中的 show() 函数。通过 using Base::show; 声明我们可以显式地调用基类的函数。
请注意函数的隐藏是一种容易导致混淆和错误的情况因此在设计派生类时应该尽量避免使用与基类函数同名但参数列表不同的函数。
代码
#include iostreamclass Base {
public:void show() {std::cout Base::show() std::endl;}
};class Derived : public Base {
public:void show(int x) {std::cout Derived::show(int) std::endl;}
};int main() {Derived derived;derived.show(); // 编译错误因为Derived中的函数隐藏了Base中的函数derived.Base::show(); // 使用using声明显示调用Base类中的函数derived.show(5); // 调用Derived类中的函数return 0;
}