Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 12.05.2012
Сообщений: 26
1

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

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

Есть метод класса внутри которого, посередине, есть проверка. Если условие сходится то метод должен выдать указатель на вектор, а если нет то вывести ошибку(мол проверьте правильность введенных данных). как это сделать можно?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.07.2012, 22:01
Ответы с готовыми решениями:

Eсть событие в WindowsForms button1_click и есть класс. Как вызвать метод класса в событии?
необходимо в самом событии баттон клик вызвать то что содержится в отдельном классе

В классе Array есть метод Sort. Можете ли вы улучшить этот метод, если значения в массиве часто повторяются
Как то проходил собеседование в одну конторку.Задали логическую задачку которую не смог...

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

Узнать есть ли символы, если есть, то, иначе это. Классика.
Кто создал подфорум +10 И так, нужна консультация. У меня есть скрипт-браузер файлов на...

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

Не по теме:

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

0
1 / 1 / 0
Регистрация: 12.05.2012
Сообщений: 26
14.07.2012, 23:09  [ТС] 7
а мне нужно выводить указатель, а не вводить его в функцию
0
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
14.07.2012, 23:53 8
Цитата Сообщение от zinjvi Посмотреть сообщение
а мне нужно выводить указатель, а не вводить его в функцию
До входа в функцию создаёте указатель на вектор (vector<int> *p), передаёте его в функцию по ссылке (bool func(vector<int> *&ptr);), если результат сравнения в функции успешен, то присваиваете этой ссылке указатель на вектор. Так как указатель был передан по ссылке, то адрес вектора будет у вас в указателе p.
1
Делаю внезапно и красиво
Эксперт С++
1309 / 1224 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
15.07.2012, 07:35 9
C++
1
2
3
4
5
6
7
int * func()
{
      // середина функции
      // если возвращать не вектор, то
           throw Ololo;
      // продолжение функции
}
1
187 / 180 / 25
Регистрация: 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
1 / 1 / 0
Регистрация: 12.05.2012
Сообщений: 26
15.07.2012, 10:36  [ТС] 11
Спасибо, буду пробывать .
0
5473 / 4868 / 831
Регистрация: 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
1492 / 1138 / 165
Регистрация: 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
Эксперт С++
2328 / 1701 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
15.07.2012, 13:48 14
zinjvi, разделить метод на два, в первом проверка, во втором выполнение действий и тогда никаких хаков не потребуется, но все таки лучше вариант с киданием исключения в случае невалидных данных.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.07.2012, 13:48

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

Есть ли какой то метод получить атрибуты класса?
print(dir(aaa_class)) Код сверху выводит в консоль все методы и атрибуты, все вперемешку. Есть...

Зачем PreparedStatement, если есть Statament + метод + параметр?
Допустим вот Statement + метод + параметр public void isStatementUpdate(String name , String...

Наследование от Иоанна. Есть ли возможность как-то вызвать метод Gleb из класса а в классе с
Привет всем. Подскажите пожалуйста using System; class a { protected int x; protected...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

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