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

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

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

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

17.03.2014, 11:48. Просмотров 350. Ответов 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
Посмотрите здесь:

False,True C++
Кто объяснит почему true == false ? C++
вывод true и false C++
C++ Значения True или False
C++ Глюк false = true == true;
С++. вывод true/false C++
true and false C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
757 / 690 / 124
Регистрация: 27.07.2012
Сообщений: 1,975
Завершенные тесты: 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
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
17.03.2014, 12:30     Перегрузка констант true и false #3
John Prick, еще не помешает оператор сделать explicit, а в проверке вызывать метод empty() вместо size().
zss
Модератор
Эксперт С++
 Аватар для zss
6129 / 5732 / 1854
Регистрация: 18.12.2011
Сообщений: 14,651
Завершенные тесты: 1
17.03.2014, 12:42     Перегрузка констант true и false #4
А как таким оператором пользоваться?
John Prick
757 / 690 / 124
Регистрация: 27.07.2012
Сообщений: 1,975
Завершенные тесты: 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
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
17.03.2014, 12:44     Перегрузка констант true и false #6
John Prick, установка explicit для операторов преобразования работает только начиная с C++11.
John Prick
757 / 690 / 124
Регистрация: 27.07.2012
Сообщений: 1,975
Завершенные тесты: 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
Собственная функция true, false C++
C++ Контейнерный класс True False
График с замкнутой областью (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
Ответ Создать тему
Опции темы

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