base和derived类中具有相同名称的对象不会被标记为错误

Joh*_*ith 8 c++ inheritance

class Base
{
public:
 type1 m_Pants;
};

class Derived : Base
{
public:
 type2 m_Pants
};
Run Code Online (Sandbox Code Playgroud)

这基本上没有被标记为错误,但是在整个项目中创建了各种各样的破坏和问题.

有没有人知道不会标记这一点的技术性?

Jam*_*lis 9

它不会被标记为错误,因为它不是错误.没有任何内容表明您不能在派生类中拥有与基类中的成员命名相同的成员.

如果你有一个obj类型的对象Derived,那么obj.m_Pants引用m_Pantsin Derived.如果要引用基本成员,可以使用obj.Base::m_Pants.

如果你是一个成员函数Base或者Base*指向一个类型的对象Derived,那么m_Pants总是引用它的成员Base,因为在那些上下文中不知道该类Derived及其成员.

嗯,这不是代码错误; 这几乎肯定是一个设计错误.

  • @Alexander:嗯,在示例代码中,`Derived`从`Base`私下继承,所以,你是对的,那是行不通的.您需要将其更改为公开继承. (3认同)

Mat*_*hen 1

它确实做了它应该做的事情。派生阴影基础。

  • 函数可以重载和覆盖。会员不能。`Derived::m_pants` 和 `Base::m_pants` 是两个完全不同的变量。如果您在小型测试程序中使用 `std::cout << sizeof (Base) << ' ' << sizeof (Derived) << std::endl;`,您会看到 `Derived` 的大小比‘基地’。您甚至可以使变量使用相同的名称和类型,但它们仍然是不同的变量,因为它们属于不同的类。 (2认同)