Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++-在Scala中设置私有访问的样式? 在C++中,可以(请原谅我没有做过的C++错误,并改正错误):_C++_Scala - Fatal编程技术网

C++-在Scala中设置私有访问的样式? 在C++中,可以(请原谅我没有做过的C++错误,并改正错误):

C++-在Scala中设置私有访问的样式? 在C++中,可以(请原谅我没有做过的C++错误,并改正错误):,c++,scala,C++,Scala,这样Sub定义了g,但不能直接调用它 在Scala中可以做同样的事情吗?如果您这样尝试的话 abstract class Super { private def g() def f() { g() } } 编译器将向您提供以下错误消息: scala:抽象成员不能有私有修饰符 私有def g() 你必须声明g()至少protected我认为最接近的是 abstract class Super { protected[this] def g: Int def f {

这样
Sub
定义了
g
,但不能直接调用它


在Scala中可以做同样的事情吗?

如果您这样尝试的话

abstract class Super {
  private def g()

  def f() {
    g()
  }
}
编译器将向您提供以下错误消息:

scala:抽象成员不能有私有修饰符
私有def g()


你必须声明
g()
至少
protected

我认为最接近的是

abstract class Super {
  protected[this] def g: Int
  def f { println(g) }
}
class Sub extends Super {
  protected[this] def g = 5
}
但这并没有给予
Super
Sub
更多的访问权限;它只是防止
Sub
在其他实例上调用该方法

在Scala中不可能有完全相同的模式。(因为JVM不支持它,所以它必须是编译器虚构的,但许多访问模式已经是编译器虚构的。)

Sub
可以调用
g()
,因为在
Sub
中定义了
g()
。它不能对
Super
abstract class Super {
  protected[this] def g: Int
  def f { println(g) }
}
class Sub extends Super {
  protected[this] def g = 5
}