私はこれらのコードを持っています
#include <iostream>
using namespace std;
class Ex;
class Exx;
class Ex {
public:
int _val;
int const *_p_val;
void setPtrVal(int * const &val) {
_p_val=val;
}
};
class Exx {
public:
Ex const *_ex;
void setEx(Ex const &ex)
{
_ex=&ex;
}
};
int main()
{
Ex x;
int i=10;
x.setPtrVal(&i);
Exx xx;
xx.setEx(x);
int y=20;
cout<<*(xx._ex->_p_val)<<endl;
x.setPtrVal(&y);
cout<<*(xx._ex->_p_val)<<endl;
cout<<*x._p_val<<endl;
return 0;
}
1: ご覧のとおり、Ex xはEx classの const ではありません。およびEx const *_ex; Ex constのみへのポインターポイントです。上記のすべてが大丈夫なのはなぜですか?
2: void setEx(Ex const &ex)の constは、関数本体で ex を変更できないことを意味しますか?
3:上記のようなプロトタイプが必要な場合、メンバーポインタ変数のセッター関数を修正するにはどうすればよいですか(セキュリティ上の理由からと仮定します)?
わかった。if Ex const *_ex; Ex *_exになる 。したがって、セッター関数では、上記のように、プロトタイプが引数オブジェクトを変更しないようにする必要があります。機能体はどうなる?