标签: access-specifier

如何防止派生类公开私有/受保护的虚拟函数?

构建基类接口的理由很充分,所有虚函数都是私有或受保护的(参见本文).但是,如何防止派生类(可能在外部客户端手中)使私有虚函数成为公共?在Virtually Yours中,作者谈到了这个问题,但没有讨论解决方案.

编辑:从您的答案和我之前的想法,似乎没有办法阻止这一点.但是因为在这种情况下,很容易出错(客户端肯定会触及受保护的虚函数),编译器会警告这种用法是有意义的.我试着用g ++测试它.首先,我写道:

class A {
        protected:
        virtual void none() { return; }
};

class B: public A {
        public:
        void none() { return; }
};
Run Code Online (Sandbox Code Playgroud)

g++ -c -Wall -pedantic file.cpp编译没有错误.添加-Weffc++发出警告:warning: ‘class A’ has virtual functions and accessible non-virtual destructor这是有道理的.添加虚拟析构函数后,没有警告.因此,这个容易出错的案例没有任何警告.

c++ virtual overriding access-specifier

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

Ruby Matrix set_element是私有的吗?

当调用set_elementMatrix类的实例时,我收到以下错误

NoMethodError: private method ‘set_element’ called for Matrix[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]:Matrix
Run Code Online (Sandbox Code Playgroud)

但是set_element在文档中的公共实例方法下列出

矩阵#set_element

另外,set_element是[] =(i,j,v)的别名,使用此方法我得到以下错误

ArgumentError: wrong number of arguments (3 for 2)
Run Code Online (Sandbox Code Playgroud)

没有任何意义,任何帮助表示赞赏.

Ruby 1.9.2 p180

ruby matrix access-specifier ruby-1.9.2

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

私人,受保护和公共的范围

在Ruby类定义中,以下场景中private关键字的范围是什么:

class Foo

  def bar_public
    puts "public"
  end

private
  def bar_private
    puts "private"
  end

  def bar_public_2
    puts "another public"
  end

end
Run Code Online (Sandbox Code Playgroud)

私人只对bar_private行事吗?还是在bar_public_2上?

ruby access-specifier

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

关于Java和C#中访问说明符的困惑

我在比较Java和C#中的访问修饰符.我想protected internal在Java中找到C#的替代品.但我注意到protected两种语言(C#Java)的修饰符都不同.protected在Java中相当于protected internalC#,因为成员也可以在同一个包中访问.

我有两个问题

  • 为什么他们在Java和C#中为同一个修饰符创建了不同的含义?
  • 如何在Java protected中使用C#(Access仅限于包含类或从包含类派生的类型.)?

c# java keyword access-specifier

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

受保护的数据成员和数据功能

当我在一个类中声明一个受保护的数据成员,这意味着它不能访问外部世界而是可以访问派生类.我的问题是

它是否可以访问派生类派生的类?

c++ oop access-specifier

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

为什么Java的"受保护"受保护的程度低于默认值?

在Java中,我们有四个访问说明:public,protected,包私有的(默认),和private.这是 ,而不是我的问题.

我的问题是关于命名protected.如下所示,给一个字段package-private的默认访问说明符可以防止包外的子类使用它,但是应用关键字protected实际上并不保护它 - 相反,它将它打开到子类任何包裹.

那么,为什么不protected保护东西; 为什么它比没有修饰符的限制更少

java terminology access-specifier semantics

4
推荐指数
2
解决办法
1308
查看次数

y中的x在无法访问的类或接口中定义,ID在结构中

我到了,main.java: error: someId in someStruct is defined in an inaccessible class or interface但我怎么能解决这个问题呢?

我的主要课程:

import subdir.Subclass;  

public class main{  
  ...  
  Subclass.someArrayList.get(i).someString  
  ...  
}
Run Code Online (Sandbox Code Playgroud)

我的subdir.Subclass类:

package subdir;

public class Subclass{


  public static java.util.ArrayList<someStruct> someArrayList = new java.util.ArrayList<someStruct>(java.util.Arrays.asList(
    new someStruct(3, "string", "string"),
    new someStruct(4, "string", "string")
  ));

}



class someStruct
{
  public int someId;
  public String someString;
  public String someString2;
  public someStruct(int someId, String someString, String someString2) {
    this.someId = someId;
    this.someString = someString;
    this.someString2 = someString2;
  }
}
Run Code Online (Sandbox Code Playgroud)

java public access-specifier java-7

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

了解C#中类的Access说明符

首先让我先说我理解访问说明符我只是没有看到在类中使用它们的意义.它对于限制范围的方法有意义,但对于类,为什么你想要一个私有类,是不是类的目的是能够重用它们?

在C#中声明一个类时访问说明符的目的是什么?你什么时候使用它们?

谢谢

c# class access-specifier

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

Swift:Class不能声明为public,因为它的Super类是内部的

我试图将该类声明为公共类,如下所示

class RewardsAndRedemptionModel:BaseObject {
var rewardHistory :[RewardHistoryModel]!
}
Run Code Online (Sandbox Code Playgroud)

这是我试图让班级公开的地方,但我不能.

public class RewardHistoryModel :BaseObject  {
 var rewardValue : String!
 var recordedByName : String!
 var rewardFor : String!
}
Run Code Online (Sandbox Code Playgroud)

即使我阅读互联网上提供的文件,我也无法得到它,请帮助我.

xcode access-specifier ios swift swift3

4
推荐指数
2
解决办法
3081
查看次数

C - 为全局变量显式编写 extern 关键字

C下面有 2 个文件。从我读到的我知道全局变量的默认存储类是 extern。如果我明确输入它,我会收到未定义的变量错误。我在这里缺少什么?这是否意味着当我省略 extern 关键字时它成为一个定义,但当我输入它时它只是一个声明?

文件1.c

#include <stdio.h>
#include <stdlib.h>
extern void file2function();

int variable; // if i put extern i will get error, isnt it implicitly extern?

int main()
{
    variable = 1;
    printf("file1 %d\n",variable);
    file2function();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

文件2.c

#include <stdio.h>
#include <stdlib.h>

extern int variable;


void file2function(){
    variable = 2;
    printf("file2 %d\n",variable);
    return;
}
Run Code Online (Sandbox Code Playgroud)

c declaration access-specifier extern

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