2

私がいくつかのクラスベーシスを持っていて、それから派生した場合、内部ベースには友達機能があります

friend int operator!=(const Basis&, const Basis&)

派生クラスの内部にはそのような関数がないので、私の質問はメインの内部にあるかどうかです

If( derived1 != derived2 ) ...

なぜそれが機能するのですか?事前に!=のおかげでキャストするためのコンストラクターがありません。if(派生!= basic)を記述した場合、それは機能しますか?

4

3 に答える 3

2

コンパイラはそれらを class のオブジェクトとして比較していますBasis。派生クラスから基本クラスに常に暗黙的に変換できるため、コンパイラはそれらを のBasisオーバーロードに渡すことができoperator !=ます。もちろん、この比較では で宣言されたフィールドしか使用できないBasisため、 のメンバーを使用して比較をより具体的にしたい場合はDerived、別のoperator !=オーバーロードを定義する必要があります。

の呼び出しに関しては、友好宣言は関係ありませんoperator !=operator !=で宣言されたプライベート メンバーへのアクセスを許可するだけBasisです。

于 2010-07-23T14:19:53.327 に答える
0

あなたの友人機能は のBasis部分のみを比較しているようですDerived。したがって、これは一定の方法で機能しますが、 のデータは無視されDerivedます。

于 2010-07-23T14:20:00.630 に答える
0

Derived クラスは Basis クラスが持つすべてのもの (この場合は != の演算子のオーバーロード) を継承するため、Derived オブジェクト (派生 1 と派生 2) にもそれらが定義されています。

于 2010-07-23T14:22:00.950 に答える