Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
zinjvi
1 / 1 / 0
Регистрация: 12.05.2012
Сообщений: 26
#1

Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную - C++

14.07.2012, 22:01. Просмотров 746. Ответов 13
Метки нет (Все метки)

Есть метод класса внутри которого, посередине, есть проверка. Если условие сходится то метод должен выдать указатель на вектор, а если нет то вывести ошибку(мол проверьте правильность введенных данных). как это сделать можно?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2012, 22:01     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную
Посмотрите здесь:

Как получить значение из метода класса, если метод возвращает указатель? - C++
Всем привет. Как получить значение из метода класса, если метод возвращает указатель? Вот тут я пилю типо класса аккаунтов, у меня не...

Указатель на метод класса - C++
Как сделать указатель на метод класса А, который наследует класс В в классе В. class A : B { public: double...

Указатель на метод класса - C++
Есть для этого какой-нибудь инструмент? Интересует именно не ссылка, а указатель. Хочется примерно следующего: typedef...

Указатель на метод класса - C++
Приветствую. Нужна помощь. Не работает указатель в данной программе: #include <iostream> #include <string.h> using namespace std; ...

Указатель на метод класса - C++
Доброго времени суток, форумчане. Необходимо получить указатель на размер вектора. Делаю из соображений быстродействия, т.к. каждый раз...

Указатель на метод класса! - C++
Ответьте пожалуйста на такой вопрос:Возможна ли такая ситуация и как ее реализовать правильно? Мне надо использовать функцию(void...

Указатель на метод класса - C++
Собственно, проблема вот в чем. Есть класс и для него определен метод class ABC ....... public: void paint(.....); ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1744 / 1087 / 71
Регистрация: 13.09.2011
Сообщений: 3,115
14.07.2012, 22:17     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную #2
Проще всего возвращать какой-нибудь заведомо невалидный указатель, nullptr как стандартный вариант. Или возвращать всегда bool, а указатель писать в переданную ссылку.
zinjvi
1 / 1 / 0
Регистрация: 12.05.2012
Сообщений: 26
14.07.2012, 22:44  [ТС]     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную #3
Цитата Сообщение от NoMasters Посмотреть сообщение
, а указатель писать в переданную ссылку.
ну bool я смогу вернуть, также умею возвращать указатель. а как сделать и то и другое?
NoMasters
Псевдослучайный
1744 / 1087 / 71
Регистрация: 13.09.2011
Сообщений: 3,115
14.07.2012, 22:48     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную #4
C++
1
bool func(void *&ptr);
Возвращать успех/неудачу, указатель класть в ptr
zinjvi
1 / 1 / 0
Регистрация: 12.05.2012
Сообщений: 26
14.07.2012, 22:50  [ТС]     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную #5
погодите ptr как аргумент функции?
NoMasters
Псевдослучайный
1744 / 1087 / 71
Регистрация: 13.09.2011
Сообщений: 3,115
14.07.2012, 22:57     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную #6
Да

Не по теме:

достаточно длинное сообщение

zinjvi
1 / 1 / 0
Регистрация: 12.05.2012
Сообщений: 26
14.07.2012, 23:09  [ТС]     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную #7
а мне нужно выводить указатель, а не вводить его в функцию
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.07.2012, 23:53     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную #8
Цитата Сообщение от zinjvi Посмотреть сообщение
а мне нужно выводить указатель, а не вводить его в функцию
До входа в функцию создаёте указатель на вектор (vector<int> *p), передаёте его в функцию по ссылке (bool func(vector<int> *&ptr);), если результат сравнения в функции успешен, то присваиваете этой ссылке указатель на вектор. Так как указатель был передан по ссылке, то адрес вектора будет у вас в указателе p.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
15.07.2012, 07:35     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную #9
C++
1
2
3
4
5
6
7
int * func()
{
      // середина функции
      // если возвращать не вектор, то
           throw Ololo;
      // продолжение функции
}
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
15.07.2012, 10:23     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную #10
Можно попробовать нечто подобное :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void* f(int a)
{
    int a1 = 10;
    bool a2 = true;
    if (a == 0)
        return &a1;
    else
        return &a2;
}
 
void main()
{
    setlocale(0,"RUS");
    int *x = 0;
    bool *b = false;
    x = (int*)f(0), b = (bool*)f(1);
    printf("%d %d\n", *x, int(*b));
}
zinjvi
1 / 1 / 0
Регистрация: 12.05.2012
Сообщений: 26
15.07.2012, 10:36  [ТС]     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную #11
Спасибо, буду пробывать .
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.07.2012, 12:23     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную #12
Цитата Сообщение от nexen Посмотреть сообщение
Можно попробовать нечто подобное :
nexen, вы используете адреса двух локальных переменных, которые после выхода из f() уже не существуют. Попробуйте сделать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void* f(int a)
{
    int a1 = 10;
    bool a2 = true;
    if (a == 0)
        return &a1;
    else
        return &a2;
}
 
void main()
{
    setlocale(0,"RUS");
    int *x = 0;
    bool *b = false;
    x = (int*)f(0), b = (bool*)f(1);
    printf("%d %d\n", *x, int(*b));
    printf("\n");
    printf("%d %d\n", *x, int(*b));
}
и посмотрите не результат.
DU
1480 / 1056 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
15.07.2012, 12:29     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную #13
ну там помимо ошибок в рантайме, это еще и самое кривое из того, что можно придумать.
чем вам не нравистя предложенный вариант с возвращением нулевого указателя, вместо bool?
Такое решение самое простое и правильное по идеологии.
Если вернувшийся указатель не нулевой, значит функция успешно отработала и этот указатель можно дальше использовать. Если же вернулся нулевой указатель, то функция отработала неверно.
Есть одна деталь для такого подхода: если логика работы функции такова, что при успешном ее отрабатывании она должна вернуть нулевой указатель, то этот подход работать не будет. В этом случае лучше воспользоваться тем, что тоже уже предлагали:

C++
1
2
3
4
5
6
7
8
9
bool Func(int*& ptr)
{
   если все хорошо
     ptr = some_ptr;
     return true;
 
    иначе
      return false;   
}
Все остальные попытки объеденить два типа в один за счет юнионов, специальных кастов или каких-нибудь Variant-типов выглядят хаками и переусложнением на ровном месте.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2012, 13:48     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную
Еще ссылки по теме:

Указатель на метод класса (ошибка) - C++
помогите исправить код что бы разобраться в нем) взято с книги и не компилиться. выкидывает ошибку (code::blocks) : &quot;ошибка:...

Указатель на метод и на поле класса - C++
Суть такова, нужно создать класс студент, определить метод доступа к скрытым полям уровень знаний и курс. Создать открытое поле стипедия....

Аргумент функции - указатель на метод класса - C++
Здравствуйте. Содержание задания - написать программу, создающую копию выбранного пользователем файла при помощи n-го кол-ва потоков...

Шаблон класса двусвязного списка, метод, возвращающий указатель - C++
Пишу шаблон класса двусвязного списка. Всё в хедере. В классе присутствует структура item. Пытаюсь написать метод, возвращающий указатель...

Как сделать указатель/ссылку на метод конкретного экземпляра класса - C++
Добрый день. Подскажите можно ли в c++ каким либо образом объявить указатель/ссылку на функцию конкретного экземпляра класса и вызвать ее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
CyBOSSeR
Эксперт C++
2299 / 1669 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
15.07.2012, 13:48     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную #14
zinjvi, разделить метод на два, в первом проверка, во втором выполнение действий и тогда никаких хаков не потребуется, но все таки лучше вариант с киданием исключения в случае невалидных данных.
Yandex
Объявления
15.07.2012, 13:48     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru