メソッド宣言の後の const 修飾子の意味 - ページ 4

 
Dmitry Fedoseev:
自分のものではなく、同じタイプの全く外国のものです。

自分のものでないものは?型が同じであること?

定数メソッドは 他人のクラスを変更できないとでも言うのでしょうか?

また、返信の際は、もう少し具体的にお願いします。何を言いたいのかが分かりませんでした。

 
Alexey Kozitsyn:

自分のものでないものは?型が同じであること?

定数メソッドは 他人のクラスを変更できないとでも言うのでしょうか?

また、返信の際は、もう少し具体的にお願いします。意味が分かりませんでした。

わけのわからないことを書いているのはあなたです。 どんなタイプでも、それ自身と同じタイプの他人のクラスを変更することができます。
 

端的に言えば定数メソッドでは、定数メソッドがあるクラスと同じクラスで宣言された(またはその親で宣言された)変数の値を変更することは不可能です。そうなんですか?

 
Dmitry Fedoseev:
書いてあることが理解できていないのはあなた自身 どのようなタイプでも、自身と同じタイプの他人のクラスを変更することができます。

やっぱり書く内容には気をつけた方がいいのかもしれませんね。メソッドはどのようにクラスを変更することができますか?クラスオブジェクトとか

そして、その疑問は文中にあった。

定数メソッドは、そのクラスのメンバを変更することはできません。

アレクセイは変わることがあるという例を出したので、この発言は正しくないと思います、Vasiliyのコメントを聞きたかったのです。

 
Alexey Kozitsyn:

やっぱり書く内容には気をつけた方がいいのかもしれませんね。メソッドはどのようにクラスを変更することができますか?クラスオブジェクトとか

そして、その疑問は文中にあった。

アレクセイは変わる可能性があるという例を出したので、その発言は間違っていると思います、Vasilyのコメントを聞きたかったです。

もっと考えて読んだらどうだ?-"宣言された変数の 値を変更する"

アレクセイの主張について、どのように話すことができるのか。ただ主張するだけでなく、実際に確認し、例を挙げ、エディタに放り込んで、コンパイルするときとしないときを見ることができる。

 
Dmitry Fedoseev:

端的に言えば定数メソッドでは、定数メソッドがあるクラスと同じクラスで宣言された(またはその親で宣言された)変数の値を変更することは不可能です。そうなんですか?

いや、クラスの各オブジェクトには、そのクラスで宣言された変数のセットがあることは知っていますね?また、定数メソッドは、呼び出された先のオブジェクト(つまりセット)だけを変更することはできません。
 
Alexey Kozitsyn:

やっぱり書く内容には気をつけた方がいいのかもしれませんね。メソッドはどのようにクラスを変更することができますか?クラスオブジェクトとか

..

こんな感じ。

    void bar(X& obj) const 
    {
        obj._x = 42; // OK! obj передается по ссылке и не имеет модификатора const
}

 
Alexey Kozitsyn:
いや、あるクラスのオブジェクトは、そのクラスで宣言された独自の変数を持っていることは知っていますよね?また、定数メソッドは、呼び出された先のオブジェクト(つまりセット)だけを変更することはできません。
通話と何の関係があるのですか?重要なのは、メソッドと変数の位置関係です。メソッドと変数が同じクラス内にある場合は、変更することはできません。クラスがパラメータとして参照渡しされる場合、可能です。
 
struct X
{

int _x, _y;
    
void foo() const 
    {
        _x = 42; // ERROR! метод объявлен, как const, не можем менять члены 
        _y = 42; // ERROR! 
    }

    void bar(Z& obj) const 
    {
        obj._x = 42; // OK! obj передается по ссылке и не имеет модификатора const
        _x = 42; // ERROR!
    }

    void bar(Z const& obj) 
    {
        obj._x = 42; // ERROR! obj передается по ссылке, как const
        obj._y = 42; // ERROR! obj передается по ссылке, как const
        _x = 42; // OK! метод объявлен без const на сонце
    }

   
};
その方が理にかなっている。
 
Dmitry Fedoseev:
通話は何の関係があるのですか?重要なのは、メソッドと変数の位置関係です。メソッドと変数が同じクラス内にある場合は、変更することはできません。クラスがパラメータとして参照渡しされる場合、可能です。
ここでの課題は、クラスAのオブジェクト1がクラスAの定数メソッドを 呼び出した場合、そのメソッドはそのオブジェクト1(つまり呼び出したオブジェクト1)を変更できないことである。しかし、object1が同じ定数メソッドに参照渡しされ、クラスAのobject2から呼び出された場合、object1を変更することができる。逆にObject2ができない。