у меня есть этот код
#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. И Ex const *_ex; является указателем только на Ex const. почему все выше в порядке?
2: Является ли const в void setEx(Ex const &ex) просто означает, что вы не можете изменить ex в теле функции?
3: как исправить функцию установки для переменной указателя члена, если мне нужен прототип, как указано выше (предположительно, по соображениям безопасности)?
ХОРОШО. if Ex const *_ex; становится Ex *_ex; Итак, в функции установки я хочу, чтобы прототип не модифицировал объект аргумента, как указано выше. Как функционируют тела?