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

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

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

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

17.03.2014, 11:48. Просмотров 373. Ответов 9
Метки нет (Все метки)

помогите, а то не могу разобраться =((
перегрузка констант 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
Посмотрите здесь:
C++ Глюк false = true == true;
true and false C++
False,True C++
С++. вывод true/false C++
вывод true и false C++
C++ Задача на true or false
Почему не меняется true/false? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
773 / 706 / 129
Регистрация: 27.07.2012
Сообщений: 2,022
Завершенные тесты: 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
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
17.03.2014, 12:30     Перегрузка констант true и false #3
John Prick, еще не помешает оператор сделать explicit, а в проверке вызывать метод empty() вместо size().
zss
Модератор
Эксперт С++
6286 / 5889 / 1909
Регистрация: 18.12.2011
Сообщений: 15,120
Завершенные тесты: 1
17.03.2014, 12:42     Перегрузка констант true и false #4
А как таким оператором пользоваться?
John Prick
773 / 706 / 129
Регистрация: 27.07.2012
Сообщений: 2,022
Завершенные тесты: 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
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
17.03.2014, 12:44     Перегрузка констант true и false #6
John Prick, установка explicit для операторов преобразования работает только начиная с C++11.
John Prick
773 / 706 / 129
Регистрация: 27.07.2012
Сообщений: 2,022
Завершенные тесты: 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, false C++
C++ Значения True или False
C++ Контейнерный класс True False
Задание со строками на true or false C++
Программа печатающая значение true и false C++

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

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

Не по теме:

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

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

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