代码之家  ›  专栏  ›  技术社区  ›  amit kumar

Const重载:C++类中的公私查找

c++
  •  8
  • amit kumar  · 技术社区  · 16 年前

    以下代码无法编译,表示“错误C2248:'A::getMe':无法访问类'A'中声明的私有成员”。为什么?我正在尝试调用公共接口。

    class B
    {
    };
    
    class A
    {
    public:
        const B& getMe() const;
    private:
        B& getMe(); 
    };
    
    int main()
    {
    A a;
    const B& b = a.getMe();
    return 0;
    }
    
    4 回复  |  直到 16 年前
        1
  •  15
  •   AProgrammer    16 年前

    B& A::getMe() 私有成员在中可见 main a.getMe() 有两个超载的成员需要考虑, B&A::getMe() B const& A::getMe() const a 不是 const

        2
  •  8
  •   moonshadow    16 年前

    在C++中,不能重载返回类型。基于成员函数的约束性重载成员函数也不例外:你重载的是函数被调用对象的约束性,而不是返回类型。

    const_cast 添加 一致性:

    const B& b = const_cast<const A&>(a).getMe();
    

    当然,虽然这很奇怪也很有趣,但如果你这样做,可能会更容易阅读:

    const A& const_a = a;
    const B& b = const_a.getMe();
    
        3
  •  4
  •   moonshadow    16 年前

    A const a;
    const B& b = a.getMe();
    

        4
  •  3
  •   Yacoby    16 年前

    为了避免两个同名但访问权限不同的函数混淆,将私有memeber函数称为其他函数不是更容易吗。