《Effective C++》条款33

2023-12-13 05:55:44

避免遮掩继承而来的名称

int x = 1;
int main()
{
	double x = 0.5;
	cout << x << endl;
}

局部域会掩盖全局域,所以会输出0.5。

class Base
{
public:
	virtual void f1(int x);
	void f2();
};
class Derived: public Base
{
public:
	void f1();
	void f2();
};
int main()
{
	Derived d;
	d.f2(); // 正确
	d.f1(2); // 错误
}

?这种情况下,Base类内的函数与Derived类内的函数构成隐藏,所以d.f1(2)无法调用到Base类内的函数。

加上using声明式就解决了,构成了函数重载。

class Derived: public Base
{
public:
	using Base::f1;
	void f1();
	void f2();
};
int main()
{
	Derived d;
	d.f2(); // 正确
	d.f1(2); // 正确
}

文章来源:https://blog.csdn.net/qq_64863535/article/details/134843230
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。