0

I'm trying to do something I'm not entirely sure is even possible. I'm trying to overload an equals operator something like this:

Class A //Defined somewhere
Struct B{
   float bobsAge; 
};
B& operator=(A,B){
    A.GetAge("bob",B.bobsAge);

    return B; 
}

Function(getAge){
    A Names;
    B structNames; 

    structNames = Names; 
}

I understand that this might not be possible, as I understand the operator= is used to do things such as setting one object of the same type equal to another object. Or is this possible to do but I'm doing something wrong.

Thanks ahead of time.

4

3 に答える 3

3

operator=は代入演算子であり、代入先のクラスでのみオーバーライドできます。したがって、あなたの場合、内部で宣言する必要がありAます。

「等しい演算子」、つまり は、operator==2 つのオブジェクトが等しいかどうかを比較するために使用されます。

于 2012-11-20T16:01:10.997 に答える
2

オーバーロードできますがoperator=、クラス内である必要があります。クラス定義の外にあるものについては、http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2Bを参照してください。

例えば

class foo {
  foo& operator=(B b) {
    //...
    return *this;
  };
};

あなたがそれで何をしようとしているのか正確にはわかりません。

また、これは代入演算子です。等号演算子とは呼ばないでください。

于 2012-11-20T15:59:32.513 に答える
1

あなたがしようとしているのは、代入演算子をオーバーロードすることですが、標準的なアプローチは、変換コンストラクターを提供することです。

class A
{
 public:
  A(const B& b) { GetAge("bob", b.bobsAge; }
};

そして、その暗黙的な変換を次のような式で開始させます。

A a;
B b;
a = b; // Assignment: calls A(const B&), and uses A's default assignment operator 
A a2 = b;  // Construction: calls A(const B&) and A(const A&)

代入演算子を提供することもできました

A& operator=(const B&);

Bしかし、 からへの代入のみを許可しA、構築を許可しないのは直観的ではないようです。

于 2012-11-20T16:01:25.317 に答える