0

C ++に関するこの演習をリストで見つけましたが、解決できませんでした。これが次のとおりです。次の命令があるとしましょう。

ObjA = ObjB; 

ObjAがClassAのオブジェクトであり、ObjBがClassBのオブジェクトである場合、これは次の場合にのみ適切に実行されます。A.ClassA
の変換関数B.ClassBC
の変換関数C.ClassAD の
コンストラクター
。ClassBのコンストラクター

複数の正解が存在する可能性があります。この演習での私の問題は、それらが両方ともオブジェクトであり、理論的には、オブジェクト内のインスタンスを変更できないことです。これは、「=」がそこで行うと私が思うことです。正解は複数あるので、正解はないと思いました。確信はないけど。

4

3 に答える 3

2

あなたは言う:

複数の正解が存在する可能性があります。

しかし、それは直接矛盾しています

場合に限り

とにかく、右側から左側への暗黙の変換が必要です。

このような変換は、rhsの変換演算子として表すことができます。タイプ、またはlhsのコンストラクターとして。タイプするか、この場合(代入)をlhsの特別な代入演算子として入力します。タイプ。


編集:ああ、私は可能な継承関係(いわゆるスライス割り当て)を考慮することができませんでしたが、私は他の答えでそれを見ました。それはあなたが与えられた答えの選択肢には言及されていません。より質の高いトレーニング資料を見つける必要があると思います…

于 2012-11-26T13:36:58.240 に答える
1

この演習での私の問題は、それらが両方ともオブジェクトであり、理論的には、オブジェクト内のインスタンスを変更できないことです。これは、「=」がそこで行うと私が思うことです。

それは正しくありません。2つのオブジェクト間で代入演算子を使用できることは確かです。場合によっては、それらが異なるタイプであっても使用できます。これが、コピーコンストラクター、代入演算子、および変換演算子のすべてです。

これは、いくつかの可能性を示す非常に簡単な例です。

std::string s1, s2;
const char* cstr = ...;
s1 = s2;
s1 = cstr;

とは言うものの、質問の言い回しは非常に貧弱だと思います。具体的には、「if and only if」の部分は、(一部が部分的に正しい場合でも)完全に正しい答えがないことを意味します。ClassAまた、との間に継承関係が存在する可能性を完全に無視しClassBます。

C++に関するこの演習をリストで見つけました

正直に言うと、この演習がそのリストにある品質を代表するものである場合は、C++演習のために別の場所に行くことを検討する価値があるかもしれません。

于 2012-11-26T13:30:53.197 に答える
1

これらのいずれかが当てはまる場合、これは正しく実行されます。

  1. ClassAタイプの引数を取る代入演算子がありますClassB
  2. ClassAタイプの引数を取る代入演算子があり、タイプするためのX変換関数があります。XClassB
  3. ClassA入力する変換関数がありClassBます。

これらがあなたのABCDの選択とどのように一致するか/一致するかどうかはわかりません。

于 2012-11-26T13:41:04.127 に答える