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

Операторы ввода и вывода - C++

Восстановить пароль Регистрация
 
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
15.08.2012, 14:19     Операторы ввода и вывода #1
Допустим есть класс

C++
1
2
3
4
5
6
7
8
9
10
class Checked
{
public:
    
private:
    double id;
    int *beg;
    std::pair<std::strin, std::strin> par;
    std::vector< std::pair<std::string,std::strin>* > vec;
};
кто может напишите с объяснениями операторы ввода и вывода
Буду благодарен.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
15.08.2012, 14:25     Операторы ввода и вывода #2
Цитата Сообщение от DaskOFF Посмотреть сообщение
кто может напишите с объяснениями операторы ввода и вывода
Буду благодарен.
- почти всё как у тебя
Переменное число аргументов
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
15.08.2012, 14:33     Операторы ввода и вывода #3
Цитата Сообщение от DaskOFF Посмотреть сообщение
std::strin
или std::string
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
15.08.2012, 14:58  [ТС]     Операторы ввода и вывода #4
Цитата Сообщение от yuron_477 Посмотреть сообщение
или std::string
string, ошибся

Добавлено через 5 минут
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- почти всё как у тебя
Переменное число аргументов
честно говоря не совсем понял, если не сложно можешь прокомментировать
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
template <typename T>
bool CArgList::operator <<(T arg)
{
    Argument pArg;
    stringstream ss;ss<<arg;
    pArg.stype    = typeid(T).name();
 
    bool flag = true;
    if(ss>>pArg.value)
        vec.push_back(pArg);
    else
        flag = false;
    return flag;
}
 
bool CArgList::operator >>(Argument &pArg)
{
    bool flag = true;
    if(vec.begin() + i < vec.end())
    {
        it = vec.begin() + i;
        pArg = (*it);
        i  = i + 1;
    }
    else
        flag = false;
    return flag;
}
в теме обговаривались операторы ввода\вывода возвращающие объект типа istream\ostream
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
15.08.2012, 17:29     Операторы ввода и вывода #5
Оператор вывода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
ostream & operator<<(ostream & os, const Checked & Ch)
{
    os<<"double: "<<Ch.id<<endl;
    os<<"int*: ";
    for (int i = 0; i<sizeof (Ch.beg); i++)
        os<<Ch.beg[i]<<" ";
    cout<<endl;
    os<<"par.first: "<<Ch.par.first<<" ,par.second: "<<Ch.par.second<<endl;
    for (int i = 0; i<Ch.vec.size(); i++)
        os<<"vec: "<<Ch.vec[i]->first<<", "<<Ch.vec[i]->second<<endl;
    return os;
}
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
15.08.2012, 20:01  [ТС]     Операторы ввода и вывода #6
Цитата Сообщение от yuron_477 Посмотреть сообщение
C++
1
2
    for (int i = 0; i<sizeof (Ch.beg); i++)
        os<<Ch.beg[i]<<" ";
объясни пожалуйста вот этот кусок
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
15.08.2012, 21:34     Операторы ввода и вывода #7
Поправочка:
C++
1
2
3
4
5
6
7
8
9
10
11
12
ostream & operator<<(ostream & os, const Checked & Ch)
{
    os<<"double: "<<Ch.id<<endl;
    os<<"int*: ";
    for (int i = 0; i<sizeof Ch.beg/sizeof (int); i++)
        os<<Ch.beg[i]<<" ";
    os<<endl;
    os<<"par.first: "<<Ch.par.first<<" ,par.second: "<<Ch.par.second<<endl;
    for (int i = 0; i<Ch.vec.size(); i++)
        os<<"vec: "<<Ch.vec[i]->first<<", "<<Ch.vec[i]->second<<endl;
    return os;
}
цикл for для массивов:
C++
1
2
3
4
5
6
7
8
9
10
11
int arr[] = {9, 8, 7, 6, 5};
int n = 5;
int* parr = &n;
cout<<"int arr[]: ";
for (int i = 0; i<sizeof arr/sizeof (int); i++)
    cout<<arr[i]<<" ";
cout<<endl;
cout<<"int* parr: ";
for (int i = 0; i<sizeof parr/sizeof (int); i++)
    cout<<parr[i]<<" ";
cout<<endl;
Добавлено через 1 час 6 минут
Вот попробовал весь код дописать, надеюсь чем-то поможет:
код
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
84
85
class Checked
{
private:
    double id;
    int *beg;
    pair<string, string> par;
    vector<pair<string, string>* > vec;
public:
    Checked(int n1 = 0, int* n2 = nullptr,
        pair<string, string> p = pair<string, string>("None", "None"),
        vector<pair<string, string>* > v = vector<pair<string, string>* >())
        : id(n1), par(p), vec(v)
    {
        beg = new int;
        beg = n2;
    }
    ~Checked()
    {
        delete beg;
    }
    friend ostream & operator<<(ostream & os, const Checked & Ch);
    friend istream & operator>>(istream & is, Checked & Ch);
};
 
ostream & operator<<(ostream & os, const Checked & Ch)
{
    os<<"double: "<<Ch.id<<endl;
    os<<"int*: "<<*Ch.beg<<endl;  // здесь, всетаки, for (int i = 0; i<sizeof Ch.beg/sizeof (int); i++) не проходит
                                  // надо в классе хранить еще и размер передаваемого массива
    os<<"par.first: "<<Ch.par.first<<" ,par.second: "<<Ch.par.second<<endl;
    for (int i = 0; i<Ch.vec.size(); i++)
        os<<"vec: "<<Ch.vec[i]->first<<", "<<Ch.vec[i]->second<<endl;
    return os;
}
istream & operator>>(istream & is, Checked & Ch)
{
    cout<<"Введите double: ";
    while (!(is >> Ch.id))                
    {
        cin.clear();                    
        while ( is.get() != '\n' ) ;   
        cout << "Ошибка! Введите число: ";
    }   
    cout<<"Введите int: ";
    int temp;
    while (!(is >> temp))                
    {
        cin.clear();                    
        while ( is.get() != '\n' ) ;   
        cout << "Ошибка! Введите целое число: ";
    }   
    while ( is.get() != '\n' )
        continue;
    delete Ch.beg;
    Ch.beg = new int(temp);
    cout<<"Введите pair.first: ";
    getline(is, Ch.par.first);
    cout<<"Введите pair.second: ";
    getline(is, Ch.par.second);
    Ch.vec.push_back(&Ch.par);
    return is;
}
 
 
int main()
{
    SetConsoleCP (1251); SetConsoleOutputCP (1251);
    
    pair<string, string> par1("First_1", "Second_1");
    pair<string, string> par2("First_2", "Second_2");
    vector<pair<string, string>* > vec;
    vec.push_back(&par1);
    vec.push_back(&par2);
    int* n = new int(5);
 
    Checked test_1(100, n, par1, vec);
    cout<<"test_1:\n\n"<<test_1<<endl;
 
    Checked test_2;
    cin>>test_2;
    cout<<"test_2:\n\n"<<test_2<<endl;
 
    system("pause");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2012, 21:40     Операторы ввода и вывода
Еще ссылки по теме:

Перегрузите операторы ввода и вывода C++
не читаются операторы ввода вывода C++
C++ Операторы ввода/вывода

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

Или воспользуйтесь поиском по форуму:
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
15.08.2012, 21:40  [ТС]     Операторы ввода и вывода #8
спасибо за труды, завтра разберу полный код
Yandex
Объявления
15.08.2012, 21:40     Операторы ввода и вывода
Ответ Создать тему
Опции темы

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