重複の可能性:
C++ のポインター変数と参照変数の違いは何ですか?
パラメータと組み合わせたさまざまな記号 (*、& など) の違いは何ですか?
以下に貼り付けたこのサンプル コードを理解するのに少し苦労しています。具体的には、関数Buf& operator=( const Buf & );
. 私が理解していることから、この関数はクラスのオブジェクトのアドレスBuf
が返されることを期待しています。2 つの疑問が生じます。
はclass のインスタンスのアドレスでもあるため
Buf* operator=( const Buf* );
、これを として宣言することも同様に適用できますか? そうでない場合、なぜですか?もしそうなら、それはコーディングスタイルの好みですか?どちらが好ましいですか?Buf*
Buf
対応する関数定義では、
*this
が返されます。私が理解していることからthis
、クラスのオブジェクトに対応するポインターまたはアドレスBuf
です。*this
ポインタが指すもの、つまり class のオブジェクトも同様ですBuf
。これは返すことと競合していBuf*
ますか?this
関数は代わりに戻る必要があり*this
ますか?
私は今日、そのような日を過ごしていると思います...誰か助けてください!!
using namespace std; class Buf { public: Buf( char* szBuffer, size_t sizeOfBuffer ); Buf& operator=( const Buf & ); void Display() { cout << buffer << endl; } private: char* buffer; size_t sizeOfBuffer; }; Buf::Buf( char* szBuffer, size_t sizeOfBuffer ) { sizeOfBuffer++; // account for a NULL terminator buffer = new char[ sizeOfBuffer ]; if (buffer) { strcpy_s( buffer, sizeOfBuffer, szBuffer ); sizeOfBuffer = sizeOfBuffer; } } Buf& Buf::operator=( const Buf &otherbuf ) { if( &otherbuf != this ) { if (buffer) delete [] buffer; sizeOfBuffer = strlen( otherbuf.buffer ) + 1; buffer = new char[sizeOfBuffer]; strcpy_s( buffer, sizeOfBuffer, otherbuf.buffer ); } return *this; } int main() { Buf myBuf( "my buffer", 10 ); Buf yourBuf( "your buffer", 12 ); // Display 'my buffer' myBuf.Display(); // assignment opperator myBuf = yourBuf; // Display 'your buffer' myBuf.Display(); }