-1

初め; thisキーワードが、コピーではなく、使用しているオブジェクトのインスタンスへのポインターであると想定するのは間違っていますか?

だから私が持っていたとしたら:

class someClass {
private:
    int _number;
public:
    someClass method(int number) {
        _number = number;
        return this;
    }
};

そのインスタンスへのポインターを返すでしょうか?

その場合、どうすればそのインスタンスのコピーを返すことができますか? 方法を見つけましたが、非常に厄介だと思います。

class someClass {
private:
    int _number;
public:
    someClass method(int number) {
        _number = number;
        someClass someClassObj;
        someClassObj._number = number;
        return someClassObj;
    }
};
4

5 に答える 5

1
  1. this in c++ is pointer only.Which has the address of calling object.

So in you code :

class someClass {
private:
    int _number;
public:
    someClass method(int number) {
        _number = number;
        return *this;
    }
};

Note its *this so this obvious return the object of someclass.

2.And the second code snippet is completely valid and will work in your case :

class someClass {
private:
    int _number;
public:
    someClass method(int number) {
        _number = number;
        someClass someClassObj;
        someClassObj._number = number;
        return someClassObj;
    }
};
于 2013-05-28T16:11:51.213 に答える
0

あなたがする必要があるのはこれだけです:

someClass method(int number) {
    _number = number;
    return *this;
}

ただし、クラスにポインターがある場合は、コピー コンストラクターをオーバーロードすることがよくあることに注意してください。

通常、コピー コンストラクターでは、ポインターが指すオブジェクトのコピーを作成し、新しい someClass オブジェクト ポインターをそのインスタンスに設定することは望ましくありません。

于 2013-05-28T15:21:39.067 に答える