微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

嵌套类的访问说明符有什么作用?

如何解决嵌套类的访问说明符有什么作用?

假设我有一个带有私有嵌套类B的类A。据我了解,这意味着B不属于公共API。这是否意味着公共和私有访问说明符仅服务于程序员而不是用户?有什么方法可以使用户意外访问私有嵌套类的公共数据成员吗?

解决方法

拥有私有的嵌套类并不意味着您不能不小心将其提供给“用户”:

#include <iostream>
#include <type_traits>

class A {

private:
  class B {
  public:
    int x = 2;
  };

public:
  B getB() { return B(); }
};

int main() {
  A a;
  
  // a returns B so you have access to the public member x
  auto b1 = a.getB();
  std::cout << b1.x << std::endl;
    
  // or get the return type to create an instance of B  
  using B = std::result_of_t<decltype(&A::getB)(A)>;
  B b2;
  std::cout << b2.x << std::endl;
}

因此,如果您在A中有一个函数public,并且可以公开B(或其他任何可以公开B的函数,并且“用户”),则即使该嵌套类为private,用户也可以引用该嵌套类。

protectedprivate阻止您直接引用名称,但是如果您有意(或无意间)以不同的方式公开名称,则此访问修饰符将不会为您提供保护。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。