[C++] 代入演算子のオーバーロードの書き方で使う場面がわからないものがあります。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
OPE

[C++] 代入演算子のオーバーロードの書き方で使う場面がわからないものがあります。

#1

投稿記事 by OPE » 8ヶ月前

お世話になっております。

C++のオペレータオーバーロードにおいて、とあるクラスAに対し、

コード:

void operator = (A* pA) {
    //処理
}
このように書いた時のオペレータはどこでどのように使用すると適用されるのかわかりません。
教えて頂けると幸いです。

以下にサンプルコードを示します。

コード:

#include <iostream>

using std::cin;
using std::cout;
using std::endl;

/* int値を1つ保持するだけのクラス */
class A {
private:
    //値の保持
    int m_val;

public:
    //コンストラクタ
    A(int val = 0) { m_val = val; }
    //デストラクタ
    ~A() {}
    //値の取得
    int GetVal() { return m_val; }

public:
    /* 使い方がわからないオペレータ */
    void operator = (A* pA) {
        m_val = pA->m_val;
    }
};

/* メイン関数 */
int main() {
    A* a1 = new A(1);
    A* a2 = new A(2);

    cout << a1->GetVal() << endl;
    cout << a2->GetVal() << endl;

    delete a1;
    delete a2;

    return 0;
}

OPE

Re: [C++] 代入演算子のオーバーロードの書き方で使う場面がわからないものがあります。

#2

投稿記事 by OPE » 8ヶ月前

補足です。

ちなみにこの記述は以下にありました。大分お世話になっています。
http://marupeke296.com/DXCLS_Impliment_Com_ptr.html

ついでに疑問ですが、
上のURLのページでは比較演算子のオーバーロード(テンプレート型のポインタの比較)もありますが、ポインタをintにキャストして比較という方法は一般的なのでしょうか。
T*型だろうと、同じポインタを示していればintキャスト後も同じ値になるということで別に問題にはならないのですかね。

アバター
usao
記事: 1375
登録日時: 5年前

Re: [C++] 代入演算子のオーバーロードの書き方で使う場面がわからないものがあります。

#3

投稿記事 by usao » 8ヶ月前

定義した通りの引数型になる形で書けば使われるんじゃないでしょうか.

コード:

A a1(5);
A a2(3);

a1 = &a2;  //こうかな

OPE

Re: [C++] 代入演算子のオーバーロードの書き方で使う場面がわからないものがあります。

#4

投稿記事 by OPE » 8ヶ月前

回答ありがとうございます。

すみません根本的に勘違いしていました。
別に特別な書き方をしているわけではなく、他のオペレータの書き方と同じですね。

張ったURLでは、よく見ると自身のクラスのアドレスを引数にとっているわけではありませんでした。単にそのメンバ変数に直接値を代入したいだけでした。

コード:

#include <iostream>

/* int値を1つ保持するだけのクラス */
class A {
private:
    //値の保持
    int m_val;

public:
    //コンストラクタ
    A(int val = 0) { m_val = val; }
    //デストラクタ
    ~A() {}
    //値の取得
    int GetVal() { return m_val; }

public:
    /* 値を登録するためのオペレータでした */
    void operator = (int val) {
        m_val = val;
    }
};

/* メイン関数 */
int main() {
    A a1(1); //初期化
    std::cout << a1.GetVal() << std::endl;

    a1 = 3; //新しい値を登録
    std::cout << a1.GetVal() << std::endl;

    return 0;
}

返信

“C言語何でも質問掲示板” へ戻る