-2

我试图阻止 B 类访问 DoSomething(Class Y) 函数并且只访问 DoSomething(Class X) 。我怎么能在 C++ 中做到这一点?

Class A {
    public:
        void DoSomething(Class Y);
}

Class B: public A { 
    public:
        void DoSomething(Class X);   
}
4

2 回答 2

3

你可以做A::DoSomething(Class Y) private,这是你可以做的唯一方法。

此外,您不是在这里覆盖,而是隐藏。尽管如此,在class(是的,它是小写字母,不是大写字母)B 中,您仍然可以调用A::DoSomething(). private是拒绝访问的唯一方法。

于 2012-04-07T22:31:38.097 回答
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’
于 2012-04-07T22:31:25.307 回答