Вызов конструктора в методе
Классы используются в основном для того, чтобы скрыть от пользователя доступ к членам класса - именно поэтому по умолчанию все члены класса являются закрытыми. В качестве иллюстрации рассмотрим простой пример. Рассмотрим процесс вычисления экспоненты. Для записи экспоненты и ее аргумента используем поля класса. Проблема состоит в том, что при таком подходе поля должны меняться синхронно - если меняется поле-аргумент, должно соответствующим образом измениться и поле для значения экспоненты, причем второе поле изменяется только вследствие изменения первого ноля. Проблема решается, если сделать поля закрытыми, а доступ к ним реализовать так, чтобы выполнялись необходимые условия.
#includeusing namespace std; //Класс с закрытыми полями: class MyExp{ double x; double xexp; //Закрытый метод для вычисления экспоненты: double mexp(double z){ double s=1,q=z; for(int i=1; i <= 100; i++){ s+=q; q*=z/(i+1);} return s;} public: //Открытый метод для изменения значения полей: void set(double z){ x=z; xexp=mexp(x);} //Конструктор с вызовом открытого метода: MyExp(double z){ set(z);} //Перегруженный метод для отображения полей: double get(){ return x;} double get(int k){ return xexp;} }; int main(){ double x=1; MyExp obj(x); cout << "x = " << obj.get() << endl; cout << "exp(x) = " << obj.get(0) << endl; return 0;}