Effective C++条款33 避免遮掩继承而来的名字

编程入门 行业动态 更新时间:2024-10-23 11:33:29

Effective C++条款33 避免遮掩继承<a href=https://www.elefans.com/category/jswz/34/1766077.html style=而来的名字"/>

Effective C++条款33 避免遮掩继承而来的名字

名称遮掩


int x = 20;void someFunc()
{double x = 10.0; std::cout << x;
]

如上操作,函数打印结果是10.0还是20呢?是10.0。因为代码访问顺序是这样的,当需要变量x,现在someFun()函数里找,找不到x,再全局找x。本例:double x遮掩了int x

继承中的名称遮掩

  • Derived类的调用作用域顺序

class Base
{
public:virtual void mf2();
};class Derived :public Base
{
public:void mf4(){fm2(); //调用基类中的fm2}
};

mf4()再函数内查找fm2----在Derived类查找fm2()------ 在Base类查找mf2()

  • 隐藏基类函数的情形
#include <iostream>
class Base
{
private:int x;
public:virtual void mf1() = 0;virtual void mf1(int);virtual void mf2();void mf3();void mf3(double);
};class Derived :public Base
{
public:virtual void mf1();void mf3();void mf4();
};
int main()
{Derived d;int x = 10;d.mf1();  //正确d.mf1(x); //错误,Base::fm1(int)被隐藏了d.mf2();  //正确d.mf3();  //正确d.mf3(x); //错误,Base::mf3(double)被隐藏了return 0;
}
  • 可在Derived类加上using Base, 让Base类的作用函数对Derived类可见,不再隐藏
class Derived :public Base
{
public:using Base::mf1;using Base::mf3; //取消隐藏virtual void mf1();void mf3();void mf4();
};
  • 也可以通过在Derived类调用Base类的函数--避免隐藏Basse类的函数
#include <iostream>
class Base
{
public:void mf1(int a){printf("====%d\n ",a );};
};class Derived :public Base
{
public:void mf1(){Base::mf1(10);};};
int main()
{Derived d;  d.mf1();  //正确return 0;
}

更多推荐

Effective C++条款33 避免遮掩继承而来的名字

本文发布于:2024-02-14 01:06:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1761549.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:而来   条款   名字   Effective

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!