2012-04-07 10 views
-2

クラスBがDoSomething(クラスY)関数にアクセスするのをやめ、DoSomething(クラスX)のみにアクセスしようとしています。 C++でどうすればいいですか?C++のoverride関数

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

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

"クラスBを停止する"とはどういう意味ですか?間違ったことをしているコードの例を挙げられますか? –

+0

'A''''''で' DoSomething(クラスY) 'を作るか' B'''で '{}'で定義しますか?あなたは正確に何を達成しようとしていますか? – AusCBloke

+0

@MujtabaAlboori:しかし、それでは?間違った機能を呼び出すコードの具体例を挙げてください(このコードを含めるように質問を編集してください)。 –

答えて

3

あなたはA::DoSomething(Class Y)privateを作ることができ、そしてそれはあなたがそれについて行くことができる唯一の方法についてです。

また、あなたはここでオーバーライドしますが、隠していません。それでも、class(はい、小文字、大文字ではありません)のBでは、まだA::DoSomething()に電話をかけることができます。アクセスを拒否する唯一の方法はprivateです。

1

私はDoSomething(Class Y)にアクセスするクラスBを停止しようとしています。 C++でどうすればいいですか?

このよう

:エラーメッセージは、これが生成することでG ++

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++ -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’ 
+0

あなたのコードには表示されないクラスBから 'A :: DoSomething'にアクセスできます。 –

+0

@LuchianGrigore、あなたと私は彼の質問を別々のことを意味していました。あなたのコメントは正しいです。私はそれを反映するために私の答えを更新します。 –