标签: access-specifier

私有,公共和受保护继承之间的区别

是什么区别public,private以及protected用C++继承?我在SO上发现的所有问题都涉及具体案例.

c++ inheritance encapsulation c++-faq access-specifier

952
推荐指数
14
解决办法
65万
查看次数

如何创建私有类方法?

为什么这种创建私有类方法的方法有效:

class Person

  def self.get_name
    persons_name
  end

  class << self

    private

    def persons_name
      "Sam"
    end
  end
end

puts "Hey, " + Person.get_name
puts "Hey, " + Person.persons_name  #=> raises "private method `persons_name' called for Person:Class (NoMethodError)"
Run Code Online (Sandbox Code Playgroud)

但这不是:

class Person

  def self.get_name
    persons_name
  end

  private

  def self.persons_name
    "Sam"
  end
end

puts "Hey, " + Person.get_name
puts "Hey, " + Person.persons_name
Run Code Online (Sandbox Code Playgroud)

ruby access-specifier

213
推荐指数
6
解决办法
9万
查看次数

为什么Ruby有私有和受保护的方法?

在我阅读本文之前,我认为Ruby中的访问控制工作方式如下:

  • public- 可以被任何对象访问(例如Obj.new.public_method)
  • protected - 只能从对象本身以及任何子类中访问
  • private - 与protected相同,但子类中不存在该方法

但是,看起来protected并且private行为相同,除了你不能private用显式接收器调用方法(即self.protected_method工作,但self.private_method没有).

这有什么意义?什么时候你不希望你的方法用显式接收器调用?

ruby language-design access-specifier

134
推荐指数
5
解决办法
4万
查看次数

在Swift3中区分fileprivate和private之间有什么好的例子

文章已在了解新的访问说明很有帮助Swift 3.它也给出了不同用途的一些例子fileprivateprivate.

我的问题是 - 是不是fileprivate在一个仅在此文件中使用的函数上使用与使用相同private

private access-control access-specifier swift swift3

134
推荐指数
6
解决办法
3万
查看次数

C++中的私有虚方法

在C++中创建私有方法虚拟的优点是什么?

我在开源C++项目中注意到了这一点:

class HTMLDocument : public Document, public CachedResourceClient {
private:
    virtual bool childAllowed(Node*);
    virtual PassRefPtr<Element> createElement(const AtomicString& tagName, ExceptionCode&);
};
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism access-specifier

118
推荐指数
5
解决办法
6万
查看次数

哪个是Java中的默认访问说明符?

所以我刚开始阅读一本Java书并想知道; 如果没有指定,哪个访问说明符是默认值?

java access-specifier

103
推荐指数
6
解决办法
14万
查看次数

Ruby中的私有模块方法

我有两个问题

最佳实践

  • 我有一个算法,使用公共接口对数据结构执行某些操作
  • 它目前是一个具有许多静态方法的模块,除了一个公共接口方法之外都是私有的.
  • 有一个实例变量需要在所有方法之间共享.

这些是我能看到的选项,哪个最好?:

  • 模块与静态(红宝石"模块")的方法
  • 使用静态方法的
  • Mixin模块包含在数据结构中
  • 重构修改该数据结构的算法部分(非常小)并使其成为调用算法模块的静态方法的mixin

技术部分

有没有办法制作私有模块方法

module Thing
  def self.pub; puts "Public method"; end
  private
  def self.priv; puts "Private method"; end
end
Run Code Online (Sandbox Code Playgroud)

private中似乎有没有什么影响,我仍然可以调用Thing.priv没有问题.

ruby access-specifier private-methods

99
推荐指数
5
解决办法
7万
查看次数

为什么我可以在复制构造函数中访问私有变量?

我了解到我永远不能访问私有变量,只能使用类中的get函数.但是为什么我可以在复制构造函数中访问它?

例:

Field::Field(const Field& f)
{
  pFirst = new T[f.capacity()];

  pLast = pFirst + (f.pLast - f.pFirst);
  pEnd  = pFirst + (f.pEnd - f.pFirst);
  std::copy(f.pFirst, f.pLast, pFirst);
}
Run Code Online (Sandbox Code Playgroud)

我的声明:

private:
  T *pFirst,*pLast,*pEnd;
Run Code Online (Sandbox Code Playgroud)

c++ private access-specifier

78
推荐指数
5
解决办法
2万
查看次数

如何在Ruby中使类构造函数成为私有的?

class A
private
  def initialize
    puts "wtf?"
  end
end

A.new #still works and calls initialize
Run Code Online (Sandbox Code Playgroud)

class A
private
  def self.new
    super.new
  end
end
Run Code Online (Sandbox Code Playgroud)

不起作用

那么正确的方法是什么?我想new私有化并通过工厂方法调用它.

ruby constructor access-specifier

52
推荐指数
3
解决办法
2万
查看次数

通过成员指针访问受保护的成员:这是一个黑客?

我们都知道protected从基类指定的成员只能从派生类自己的实例访问.这是标准的一个特性,这已在Stack Overflow上多次讨论:

但似乎有可能用成员指针来解决这个限制,因为用户chtz 向我展示:

struct Base { protected: int value; };
struct Derived : Base
{
    void f(Base const& other)
    {
        //int n = other.value; // error: 'int Base::value' is protected within this context
        int n = other.*(&Derived::value); // ok??? why?
        (void) n;
    }
};
Run Code Online (Sandbox Code Playgroud)

coliru现场演示

为什么这可能,它是一个想要的功能或实施中的某个地方或标准的措辞?


从评论中出现了另一个问题:如果Derived::f用实际调用Base,是不确定的行为?

c++ protected access-specifier member-pointers language-lawyer

52
推荐指数
2
解决办法
3777
查看次数