我试图阻止B级访问DoSomething(Y类)功能,只访问DoSomething(Class X)。我怎么能用C ++做到这一点?。
Class A {
public:
void DoSomething(Class Y);
}
Class B: public A {
public:
void DoSomething(Class X);
}
答案 0 :(得分:3)
你可以A::DoSomething(Class Y)
private
,这就是你可以采取的唯一方法。
另外,你不是在这里,而是在躲藏。不过,在class
(是的,它是小写,而不是大写)B中,您仍然可以调用A::DoSomething()
。 private
是拒绝访问的唯一方法。
答案 1 :(得分:1)
我试图阻止B级访问
DoSomething(Class Y)
。我怎么能用C ++做到这一点?
像这样:
class X {};
class Y {};
class A {
public:
void DoSomething(class Y);
};
class B: public A {
public:
void DoSomething(class X);
};
int main () {
B b;
Y y;
b.DoSomething(y);
// Note that b can still access DoSomething(y) if you want it to:
b.A::DoSomething(y);
}
请注意这在g ++中生成的错误消息:
g++ -ansi -pedantic -Wall -Werror b.cc -o b
b.cc: In function ‘int main()’:
b.cc:17:18: error: no matching function for call to ‘B::DoSomething(Y&)’
b.cc:17:18: note: candidate is:
b.cc:11:14: note: void B::DoSomething(X)
b.cc:11:14: note: no known conversion for argument 1 from ‘Y’ to ‘X’