3

編集: すぐ後に続くコードは、ヘッダー内にある作業バージョンです。

inline char * operator & (const char String1 [], const MyStringClass & String2)
{
    int length = strlen (String1) + String2.Length();
    char * pTemp = new char [length + 1];
    strcpy (pTemp, String1);
    strcat (pTemp, String2.GetStr());   
    return pTemp;
}

自分で (検索、Google、本などで) 役立つ情報を見つけることができなかったので、質問する必要性を感じたのはこれが初めてです。私のコースブックは C++ Primer 5th Edition で、Ch. 14 は、オペレーターの過負荷をカバーしています。私は必ずしも「答え」を探しているわけではありませんが、正しい方向へのナッジを探しているわけではありません (私はこのことを学びたいからです)。

代入では、独自の文字列クラスを作成し、いずれかの側でクラス オブジェクトを受け取る一連の演算子をオーバーロードします。ただし、左側でのみクラス オブジェクトを受け取る代入演算子は例外です。私はあらゆる種類の戻り値の型をいじりました (これはメンバー関数ではありません。これをフレンド関数にする試みは失敗しました)。

/* 
   Note: return by value, otherwise I get a warning of returning the address
   of a local variable, temporary. But no matter the return type or what I'm
   returning, I always get the error: C2677: binary '&' : no global operator 
   found which takes type 'MyStringClass' (or there is no acceptable 
   conversion)
*/

MyStringClass operator & (const char String1 [], const MyStringClass & String2)
{
    /*
       The only requirement is that the left side has const char [] so that
       (const char []) & (MyStringClass &) will concatenate. There is no return 
       type requirement; so, I could either try and return a string object or
       an anonymous C-type string.

       cout << StringOject1 << endl; // this works
       cout << (StringObject1 & "bacon") << endl; // so does this; 
       // another function overloads & such that: obj & const char [] works

       cout << ("bacon" & StringObject1) << endl; // but not this
    */

    MyStringClass S (String1); // initialize a new object with String1
    S.Concat (String2); // public member function Concat() concatenates String2
                        // onto String1 in S
    return S; // this does not work

    /* a different way of trying this... */
    int Characters = strlen (String1) + String2.Length();
    int Slots = Characters;
    char * pTemp = new char [Slots + 1];
    strcpy (pTemp, String1);
    strcat (pTemp, String2.pString); // this won't work; pString is a private 
                                     // member holding char * and inaccessible
    // making it pointless to try and initialize and return an object with pTemp
}
4

1 に答える 1

1

あなたのコードを見て、私が理解できることから、おそらく次のようなものを探しているでしょう:

class MyStringClass
{
public:
    const char* data() const;

private:
const char* charptr;
};


const char* MyStringClass::data() const
{
    return charptr;
}


MyStringClass operator & (const char String1 [], const MyStringClass & String2)
{
    /* a different way of trying this... */
    int len = strlen(String1) + String2.Length();
    char * pTemp = new char [len + 1]; //total length of both strings
    strcpy (pTemp, String1);
    strcat (pTemp, String2.data()); // you need to have a public member function that returns the string as const char*
    MyStringClass str(pTemp); //requires MyStringClass to have constructor that takes char*
    return str; //return the string

}
于 2013-02-06T20:33:06.007 に答える