构建基类接口的理由很充分,所有虚函数都是私有或受保护的(参见本文).但是,如何防止派生类(可能在外部客户端手中)使私有虚函数成为公共?在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这是有道理的.添加虚拟析构函数后,没有警告.因此,这个容易出错的案例没有任何警告.
当调用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是[] =(i,j,v)的别名,使用此方法我得到以下错误
ArgumentError: wrong number of arguments (3 for 2)
Run Code Online (Sandbox Code Playgroud)
没有任何意义,任何帮助表示赞赏.
Ruby 1.9.2 p180
在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上?
当我在一个类中声明一个受保护的数据成员,这意味着它不能访问外部世界而是可以访问派生类.我的问题是
它是否可以访问派生类派生的类?
我到了,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) 首先让我先说我理解访问说明符我只是没有看到在类中使用它们的意义.它对于限制范围的方法有意义,但对于类,为什么你想要一个私有类,是不是类的目的是能够重用它们?
在C#中声明一个类时访问说明符的目的是什么?你什么时候使用它们?
谢谢
我试图将该类声明为公共类,如下所示
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)
即使我阅读互联网上提供的文件,我也无法得到它,请帮助我.
我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) access-specifier ×10
java ×3
c# ×2
c++ ×2
ruby ×2
c ×1
class ×1
declaration ×1
extern ×1
ios ×1
java-7 ×1
keyword ×1
matrix ×1
oop ×1
overriding ×1
public ×1
ruby-1.9.2 ×1
semantics ×1
swift ×1
swift3 ×1
terminology ×1
virtual ×1
xcode ×1