《Effective C++》条款33

避免遮掩继承而来的名称

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); // 正确
}

相关推荐

  1. 《Effective C++》33

    2023-12-12 18:14:03       59 阅读
  2. 《Effective C++》37

    2023-12-12 18:14:03       57 阅读
  3. effective c++ 笔记 26-31

    2023-12-12 18:14:03       42 阅读
  4. 34:区分接口继承和实现

    2023-12-12 18:14:03       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-12 18:14:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-12 18:14:03       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-12 18:14:03       82 阅读
  4. Python语言-面向对象

    2023-12-12 18:14:03       91 阅读

热门阅读

  1. 揭秘平台工程如何减轻工程师的认知负荷

    2023-12-12 18:14:03       56 阅读
  2. TypeScript 第二节:基础类型

    2023-12-12 18:14:03       53 阅读
  3. 安卓apk逆向

    2023-12-12 18:14:03       72 阅读
  4. Go map 大小

    2023-12-12 18:14:03       61 阅读
  5. Docker容器与镜像

    2023-12-12 18:14:03       47 阅读
  6. Python 字符串前缀

    2023-12-12 18:14:03       55 阅读
  7. SQL语句---带IN关键字的条件查询

    2023-12-12 18:14:03       57 阅读
  8. simpleitk 配准

    2023-12-12 18:14:03       55 阅读
  9. vue3快速上手

    2023-12-12 18:14:03       53 阅读