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

Перегрузка констант true и false - C++

Восстановить пароль Регистрация
 
advaito
0 / 0 / 0
Регистрация: 30.10.2013
Сообщений: 33
17.03.2014, 11:48     Перегрузка констант true и false #1
помогите, а то не могу разобраться =((
перегрузка констант true и false: обращение к экземпляру класса дает значение true, если строка не пустая, иначе false.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include "stdafx.h"
#include "iostream"
#include <string>
#include <algorithm>
#include "vector"
using namespace std;
 
 class stroki
 { 
 public: 
     stroki(string line,int n)
     {
         stroki::line=line;
         stroki::n=n;
     };
     string get_line(stroki &ss)
     {
         return ss.line;
     };
     /*string get_line(stroki &ss)
     {
         return ss.line;
     };*/
     
     int count_spaces(stroki &ss)
     {
         return count(ss.line.begin(),ss.line.end(),' ');
     };
 private:
     string line;
     int n;
  };  
 
 int main()
 {
     vector<stroki>st;
     string temp="My, r! O.  ! b.  o, T, ";
     stroki s1(temp,temp.length());
     string temp1="My, s! ?T !r..  . I! n, G.";
     stroki stt(temp1,temp1.length());
     string s="";
 
 
     st.push_back(s1);
     st.push_back(stt);
 
     for(int i=0;i<st.size();++i)
     {  
         cout<<st[i].get_line(st[i])<<endl;
         cout<<st[i].count_spaces(st[i])<<endl;
     }
    
 
    
 
    
        for(int i=0;i<st.size();++i,cout<<endl)
     {  
        
         for(int ii=0;ii<st[i].get_line(st[i]).length();++ii)
         {
             if(isupper(st[i].get_line(st[i])[ii]))
             cout<<char((int)st[i].get_line(st[i])[ii]+32);
                     else cout<<char((int)st[i].get_line(st[i])[ii]-0);
         }
        }
 
 
 
        cout<<endl;
        cout<<"____1 "<<temp1<<" 1____";
 
         for(int i=0;i<temp1.length();++i)
         {
             if(!ispunct(temp1[i]))s+=temp1[i];
             else cout<<temp1[i]<<endl;
         }
         temp1=s;
        cout<<"____1 "<<temp1<<" 1____";
        
     system("Pause");
     return 0;
  }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2014, 11:48     Перегрузка констант true и false
Посмотрите здесь:

False,True C++
вывод true и false C++
C++ Глюк false = true == true;
С++. вывод true/false C++
true and false C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
17.03.2014, 12:27     Перегрузка констант true и false #2
C++
1
2
3
4
5
6
7
8
9
class stroki
{
public:
    operator bool() const
    {
        return (line.size() != 0);
    }
    /* ... */
};
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
17.03.2014, 12:30     Перегрузка констант true и false #3
John Prick, еще не помешает оператор сделать explicit, а в проверке вызывать метод empty() вместо size().
zss
Модератор
Эксперт С++
 Аватар для zss
5953 / 5558 / 1787
Регистрация: 18.12.2011
Сообщений: 14,204
Завершенные тесты: 1
17.03.2014, 12:42     Перегрузка констант true и false #4
А как таким оператором пользоваться?
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
17.03.2014, 12:43     Перегрузка констант true и false #5
Цитата Сообщение от Tulosba Посмотреть сообщение
а в проверке вызывать метод empty() вместо size()
Здесь я исходил из того, что там может использоваться не std::string. size() в этом случае, наверное, понятнее для ТС. А если std::string используется, то да, проще вызвать empty().

Цитата Сообщение от Tulosba Посмотреть сообщение
не помешает оператор сделать explicit
Ну это тема широкая. Не знаю, как там стандарт это трактует, но например VC++6.0 explicit для этого оператора не компилирует. Да и в литературе я встречал только более сложные (мягко говоря) способы избежать неявного преобразования в типы, отличные от bool. Но они явно не для ТС.

Добавлено через 35 секунд
Цитата Сообщение от zss Посмотреть сообщение
А как таким оператором пользоваться?
C++
1
if (st) { /*...*/ }
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
17.03.2014, 12:44     Перегрузка констант true и false #6
John Prick, установка explicit для операторов преобразования работает только начиная с C++11.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
17.03.2014, 12:47     Перегрузка констант true и false #7
Tulosba, спасибо, буду знать.

Не по теме:

Я пока ещё в VC++6.0 копаюсь

DrOffset
17.03.2014, 13:19
  #8

Не по теме:

Цитата Сообщение от John Prick Посмотреть сообщение
Я пока ещё в VC++6.0 копаюсь
Лучше ее там же и закопать. Придется потом много переучиваться.

John Prick
17.03.2014, 13:25
  #9

Не по теме:

DrOffset, ну так я же не балуюсь. Такая работа у меня.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2014, 13:29     Перегрузка констант true и false
Еще ссылки по теме:

Задание со строками на true or false C++
C++ Задача на true or false
C++ Контейнерный класс True False

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

Или воспользуйтесь поиском по форуму:
DrOffset
17.03.2014, 13:29     Перегрузка констант true и false
  #10

Не по теме:

John Prick, ну тогда - понимаю и сочувствую. У нас тоже есть проекты на gcc 2.9, примерный ровесник VC6 со своим набором приколов.

Yandex
Объявления
17.03.2014, 13:29     Перегрузка констант true и false
Ответ Создать тему
Опции темы

Текущее время: 15:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru