Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2014, 21:59   #1
dkii
Пользователь
 
Регистрация: 11.12.2013
Сообщений: 54
Стрелка Возврат значения метода через указатель

Здраствуйте, помогите зделать что бы возврат результатов с метода решения уравнения возвращался через указатель.
Код:
#include <iostream>
#include <locale>
using namespace std;
class equation
{
private:
    float A, B, X;
public:
    equation(float, float, float);
    void show_equation(void);
};
 
equation::equation(float A, float B, float C)
{
    equation::A = A;
    equation::B = B;
    equation::X = X;
}
 
void equation::show_equation(void)
{
    cout << "Введите значение параметров уравнения: " << endl;
    cout << "Введите Значения параметра a: " << endl;
    cin >> A;
    cout << "Введите Значения параметра b: " << endl;
    cin >> B;
    if (A == 0 ) cout << "Ошибка, а>0 " << endl;
    else {
        X=-B/A;
        cout << "X= "<<X<< endl;
    }
}
 int main()
{
    setlocale(LC_ALL, "RUS");
    equation equation(0, 0, 0);
    equation.show_equation();
    system("Pause");
 
}
dkii вне форума Ответить с цитированием
Старый 05.02.2014, 14:09   #2
Ilot
Новичок
Джуниор
 
Регистрация: 05.02.2014
Сообщений: 1
По умолчанию

Возвращать ссылку на временный объект нельзя. Поэтому вернуть можно только указатель на поле X. Но это плохая идея, так как нарушается принцип сокрытия данных. А значит следует переписать класс как структуру, либо перенести поля класса equation в public скцию.
Да и вообще плохо составлен класс. Инициализировать поля класса в теле конструктора не желательно.
Ilot вне форума Ответить с цитированием
Старый 05.02.2014, 16:51   #3
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,152
По умолчанию

Желательно ввод данных делать не внутри функции show_equation, а в теле main(), имхо, кагрится. Тогда инициализация в теле конструктора будет логичным. Мне это кажется более читабельным: идет ввод переменных; создается объект, в который передаются начальные значения; после любых вызовов методов начальные значения остаются неизменными.
Не стоит называть класс и объект класса одним и тем же словом (фигасе, и впрямь компиляется!).
Код:
#include <limits>

...

float * equation::show_equation(void)
{
 	X = numeric_limits::infinity;

  	if (A == 0 ) cout << "Ошибка: а равно 0 " << endl;
 	else {
 		X=-B/A;
 		cout << "X= "<<X<< endl;
 	}
 	return &X;
}
Этот вариант, из-за numeric_limits::infinity, тоже кривоват)
Smogg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
возврат результата метода по указателю RAPiT C# (си шарп) 3 09.01.2014 15:48
возврат значения выделенной ячейке по условию VITA11111 Microsoft Office Excel 4 01.07.2013 13:59
Возврат массива из метода (с#) Ulkar Помощь студентам 1 20.04.2013 22:17
Возврат значения активной ячейки Пингвини Microsoft Office Excel 2 17.04.2012 15:48
Возврат значения из класса TThread Alter Общие вопросы Delphi 1 27.12.2010 21:48