C ++中的变量覆盖

时间:2016-12-29 20:08:46

标签: c++ override

请考虑以下代码。

class Base1
{
public:
  void func1(float x)
  {var1 = x;}

private:
  float var1;
};


class Derived1: public Base1
{
public:
  void func1(int x)
  {var1 = x;}

private:
  int var1;
};

使用新数据类型(本例中为整数)重新定义变量var1是一个好主意吗?这有什么问题吗? (例如:影子!)

1 个答案:

答案 0 :(得分:1)

一般来说,将父变量替换为具有相同名称的新变量可能会造成混淆和容易出错。

在你的例子中,不仅要替换变量,还要设置它的功能,通过“名称隐藏”(你将其称为“阴影”)。

您似乎不喜欢父级的属性(可能还有行为),这可能是您应该重新访问类层次结构的信号。

您可以将“名称隐藏”理由视为语言功能here