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

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

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

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

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

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

Как передать в метод класса Menu указатель на метод дочернего класса? - C++
Как передать в метод базового класса указатель на метод дочернего: class Menu() { protected: setCallback(*********); //...

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

Функция, получающая указатель на обычную функцию, получает указатель на метод класса - C++
Здравтсвуйте. Имеется вопрос по указателям на методы класса. Допустим, есть функция( f ), которая принимает указатель на функцию и...

Не сходится теория и практика метод Шелла и метод простого выбора - C++
Здравствуйте! Помогите пожулуйста найти ошибке в коде, Я уже не знаю где ее искать. У меня метод простого выбора работает по показателям...

Указатель на метод класса в качестве аргумента метода класса - C++
Функция _createFun вызывается для создания ХХХ в основном классе. Но вот потребовалось создать ХХХ в дополнительном классе. Вопрос: как...

Если в строке есть одинаковые цифры вывести Yes ,иначе Nо - C++
ребят помогите почему не работает ?? задача такова : если в строке есть одинаковые цифры вывести Yes ,иначе Но #include...

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

Не по теме:

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

0
zinjvi
1 / 1 / 0
Регистрация: 12.05.2012
Сообщений: 26
14.07.2012, 23:09  [ТС] #7
а мне нужно выводить указатель, а не вводить его в функцию
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.07.2012, 23:53 #8
Цитата Сообщение от zinjvi Посмотреть сообщение
а мне нужно выводить указатель, а не вводить его в функцию
До входа в функцию создаёте указатель на вектор (vector<int> *p), передаёте его в функцию по ссылке (bool func(vector<int> *&ptr);), если результат сравнения в функции успешен, то присваиваете этой ссылке указатель на вектор. Так как указатель был передан по ссылке, то адрес вектора будет у вас в указателе p.
1
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 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;
      // продолжение функции
}
1
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));
}
1
zinjvi
1 / 1 / 0
Регистрация: 12.05.2012
Сообщений: 26
15.07.2012, 10:36  [ТС] #11
Спасибо, буду пробывать .
0
alsav22
5421 / 4816 / 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));
}
и посмотрите не результат.
0
DU
1483 / 1129 / 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-типов выглядят хаками и переусложнением на ровном месте.
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
15.07.2012, 13:48 #14
zinjvi, разделить метод на два, в первом проверка, во втором выполнение действий и тогда никаких хаков не потребуется, но все таки лучше вариант с киданием исключения в случае невалидных данных.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2012, 13:48
Привет! Вот еще темы с ответами:

Указатель на метод класса. - C++
Программа отказывается присваивать метод класса указателю. Как исправить? test.cpp: In function ‘int main()’: test.cpp:66: error:...

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

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

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


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

Или воспользуйтесь поиском по форуму:
14
Yandex
Объявления
15.07.2012, 13:48
Ответ Создать тему
Опции темы

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