C++多重继承私有(private)成员冲突

标签 c++ multiple-inheritance

我的实际问题有点复杂,需要使用模板类。 这是一个更简单的版本。

我有两个类:

class A
{
public:
   float a() { return _value; }
private:
   float _value;
};

class B
{
public:
   float b() { return _value; }
private:
   float _value;
};

class AB : public A, public B
{
public:
   // a() should return A::_value ?
   // b() should return B::_value ?
}

如果 AB 的成员 _value 是私有(private)的,那么该成员之间是否会发生任何冲突?不会有这样的冲突是有道理的,因为 AB 不知道该成员。

最佳答案

即使成员是公开的,也不会有冲突。但是,如果您尝试从 AB 的范围访问 _value(假设 AB 继承自 AB) 而没有以某种方式限定它:

class A { public: float _value; };
class B { public: float _value; };
class AB : public A, public B {
public:
  void f() {
    std::cout << _value;    // Error: ambiguous reference
    std::cout << A::_value; // OK
  }
};
class AB2 : public A, public B {
public:
  using B::_value;
  void f() {
    std::cout << _value; // OK; resolves to B's version.
  }
};

关于C++多重继承私有(private)成员冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11423462/

相关文章:

c++ - 使用 Image.ptr<double>(0);在 OpenCV 中使用彩色图像

c++ - 带有 libcurl 的 HTTP Post header 字段

c++ - 选择语句和隐式转换只给我字符串的第一个字符

c++ - 将数组传递给增强 vector 元组

Java 多级泛型继承

c++ - 多重继承和重复函数调用

java - 关于克服 Java 中缺乏多重继承的任何既定做法?

c# - Entity Framework 中多重继承的替代方案

c++ - _fread_nolock、_fseek_nolock 的预期用途是什么?

c++ - 在多继承布局中分别覆盖虚方法