タイトルは基本的にはすべてです。私は主に他のAPIの他の関数のパラメータを初期化できるオブジェクト(たとえば、カスタム文字列オブジェクト)を作成できるように、これを行う必要があります。ここで動作するようにカスタム整数クラスを取得しようとしている私の例を示します。 C++データ型を初期化できるクラスを作成するにはどうすればよいですか?
#include <iostream>
using namespace std;
class test
{
public:
int member;
test(int i) : member(i) {}
friend int &operator=(int &i, test t);
};
int &operator=(int &i, test t)
{
return (i = t.member);
}
int main()
{
int i;
test t = 90;
cout << (i = t);
return 0;
}
は、残念ながら私は、オペレータが=メンバ関数にする必要があるというエラーを受け取ります。私は代入演算子の静的メンバー以外のオーバーロードが実装されないようにするC++標準の目標を理解していますが、これを行う他の方法はありますか?助けを借りてありがとうございます/提案!何をしようとする
「[演算子=]オペランドのビットコピー(シャローコピー)することにより、単純なビットない」...オペランドが...おそらく、メンバ変数を使用するには、奇妙な用語のですか?そして、それを持つメンバのコピーコンストラクタを呼び出します。ビットごとのシャローコピー(例えば、 'std :: string')を行わないかもしれません。危険なポインタの浅いコピー:通常はそうですが、必ずしもそうではありません。(通常は 'const')静的参照データへのポインタを安全にコピーすることができます。 –
@トニー:ありがとう!私はそのビットをオペランドについてメンバーに変更しました。それはそれほど冗長ではなかった。私は、ダイナミックメモリ割り当てを持つメンバポインタの最も普通の場合を言及していました。これは、オーバーロードされたものに対するデフォルトの割り当てが初心者を最も傷つけるためです。あなたのコメントは、回答を読む人に例外を解読するのに役立つはずですので、ありがとう:) –
はい - 私はあなたの考えに従うことができます、ちょうど心配 "初心者"は "任意のポインタ=あなた自身の演算子が必要="ガイドラインはルール。しかし、それは良い指針であり、あなたが言うように、初心者を助ける。ダイナミックメモリは100%相関していませんが、別の危険の兆候です。 pointed-toオブジェクトは、 'main()'で呼び出されたファクトリメソッドによって返され、アプリケーション終了直前にのみ削除され、それを指すオブジェクトの存続期間がその中に含まれます)。乾杯。 –