-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 に答える