标签: access-specifier

C++访问说明符太少了?

据我所知,C++中只有3个访问说明符:私有,公共,受保护

与这些3访问说明符,我怎样才能使一个方法可用到的类中的项目,但不能使用于"外国人" ??(如内部公共在C#)

c++ access-specifier

1
推荐指数
2
解决办法
466
查看次数

基类的"默认"访问说明符的差异的基本原理

我知道C++ 之间structclassC++ 之间的差异很小.我也理解几个差异的原因.像这个,

  • struct的成员默认公共的 ; 默认情况下,类的成员是 私有的.struct的成员默认公开的原因是为了C++-struct兼容C-struct.并且默认情况下,类成员是私有的原因是引入数据封装的概念(即强制执行面向对象的原则/技术/等).

我不明白的是,引用标准$ 11.2/2 [class.access.base]

如果没有基类的访问说明符,则在派生类声明为struct时假定为public,并在声明类时声明为private.

这种扭曲和反均匀性的基本原理是什么?为什么需要这种差异?

标准示例,

class B {  };
class D1 : private B {  };
class D2 : public B { };
class D3 : B { };         //B private by default
struct D4 : public B { };
struct D5 : private B { };
struct D6 : …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance access-specifier language-lawyer

1
推荐指数
1
解决办法
1679
查看次数

Ruby - 私有方法的内联声明

目前正在编写一个类,其中我正在考虑私有的方法遍布整个代码.private我想在类的顶部做一个内联声明,而不是添加一行并复制粘贴它下面的所有内容private :foo, :bar.

但是,每当我尝试将参数声明为私有内联的方法时,我都会收到一条错误消息.举例来说,如果我有一个方法foo(bar, baz),并尝试声明它与私人private :foo(bar, baz)我得到的两个括号错误信息,希望kEND=替代.

如果我尝试声明它private :foo,我会被告知foo在我的代码中没有这样的方法.

如何在不发生这些错误的情况下做我想做的事情?

ruby access-specifier

1
推荐指数
1
解决办法
1480
查看次数

为什么仍然可以访问成员函数,即使它被声明为"私有"?

可能重复:
公共虚拟函数在C++中派生为private

class B
{
    private:
    int b;
    public:
    B(int i);
    virtual void show()
    {
        cout<<"B::show()called. "<<b<<endl;
    }
};

B::B(int i=0)
{
    b=i;
}

class D:public B
{
    private:
    int d;
    void show()
    {
        cout<<"D::show() called. "<<d<<endl;
    }
    public:
    D(int i, int j);
};

D::D(int i=0, int j=0):B(i)
{
    d=j;
}

void fun(B&obj)
{
    obj.show();
}
/*if I redefine fun() as follow, the result would be the same
void fun(B*obj)
{
obj->show();
}
*/
int main()
{
    D *pd=new D(5,8); …
Run Code Online (Sandbox Code Playgroud)

c++ virtual-functions access-specifier private-members

1
推荐指数
2
解决办法
317
查看次数

Main()的默认访问说明符

C#中Main方法的默认访问说明符是什么?

如果static void Main()的默认访问说明符是私有的,那么外部实体如何例如.OS调用这个方法?

任何外来进程都不应该调用此方法.

c# program-entry-point access-specifier

1
推荐指数
1
解决办法
488
查看次数

未定义的访问成员变量的访问权限(既不公开也不私有)

如果您没有定义访问权限,C++中的成员变量会发生什么?

例如,在以下代码中:

class Base {
  int myQuestion;
  public:
    int myPublic;
  private:
    int myPrivate;
}
Run Code Online (Sandbox Code Playgroud)

谁有权访问myQuestion

c++ class member access-specifier

1
推荐指数
1
解决办法
155
查看次数

为什么我要将实现的接口方法声明为"public"?

interface Rideable {
    String getGait();
}

public class Camel implements Rideable {
    int weight = 2;

    String getGait() {
        return " mph, lope";
    }

    void go(int speed) {++speed;
        weight++;
        int walkrate = speed * weight;
        System.out.print(walkrate + getGait());
    }

    public static void main(String[] args) {
        new Camel().go(8);
    }
}
Run Code Online (Sandbox Code Playgroud)

编译上面的代码后,我得到了一个编译错误,与getGait()方法的访问修饰符有关.请解释一下,为什么我要getGait()使用public访问修饰符声明?

java scope interface access-specifier

1
推荐指数
1
解决办法
1079
查看次数

公共const变量或私有的get函数,哪个更好?

所以我有一个变量,我经常要在课外打电话,有人告诉我应该这样做:

class Foo{
    public:
        //stuff
    Type getVariable();
    private:
        Type Variable;
        //stuff
}
Run Code Online (Sandbox Code Playgroud)

但为什么我不能只使用:

class Foo{
    public:
        //stuff
    const Type variable
    private:
        //stuff
}
Run Code Online (Sandbox Code Playgroud)

c++ object access-specifier

0
推荐指数
1
解决办法
79
查看次数

公共与受保护的抽象类方法

在使用包访问级别抽象类的非静态方法公开vs使它们受到保护时是否存在任何安全/访问差异?只有扩展抽象类的同一个包中的类才能访问非静态方法吗?那么,这些非静态方法是公共的还是受保护的是否重要,因为抽象类本身会限制谁可以扩展它?

abstract class MyClass {
    protected void myFunction(){
        System.out.println("Only child classes can print this");
    }
}

abstract class MyClass {
    public void myFunction(){
        System.out.println("Still, only child classes can print this");
    }
}
Run Code Online (Sandbox Code Playgroud)

java access-specifier

0
推荐指数
1
解决办法
1万
查看次数

红宝石中的私有方法与受保护方法

如果方法受保护,则定义类或其子类的任何实例都可以调用该方法。如果方法是私有的,则只能在调用对象的上下文中调用它-即使对象与调用者属于同一类,也永远无法直接访问另一个对象的私有方法。

当在ruby中搜索私有方法和受保护方法之间的区别时,我从网上得到了这个定义。

我对此有2个疑问

class Abc
  def abc
    xyz
  end
 protected 
  def xyz
    p "hai"
  end
end

a=Abc.new
a.abc
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我隐式地在对象a上调用xyz,即使我是私有的,这也是我将如何调用xyz。所以“定义类的任何实例都可以调用它”是什么意思?

其次,

 class Abc
   def abc(obj)
     obj.xyz1
     obj.xyz2
     obj.xyz3
   end
 end

 class Xyz
   def xyz1
     p "called"
   end

  private 
   def xyz2
     p "called"
   end

  protected
   def xyz3
     p "called"
   end

 end

 a=Abc.new
 b=Xyz.new
 a.abc(b)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我可以在对象a上调用obj b的xyz1方法。但是我不能在对象a上调用obj b的受保护xyz3方法和私有方法xyz2方法。因此“即使对象属于与呼叫者同班。” 这确切是什么意思???

有人可以通过更好的例子帮助我理解这一点吗?

ruby ruby-on-rails access-specifier

0
推荐指数
2
解决办法
7556
查看次数