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

Итераторы - C++

Восстановить пароль Регистрация
 
Sheppard
1 / 1 / 0
Регистрация: 27.05.2012
Сообщений: 48
27.05.2012, 16:04     Итераторы #1
Добрый день!
Начал изучать классы в C++ параллельно с итераторами.
Решил сделать простенькую программу, которая создаёт список классов.

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
#include "stdafx.h"
#include <iostream>
#include <string>
#include <list>
#include <windows.h>
#include <conio.h>
using namespace std;
 
class Players{
public:
    string name;
    int health;
    int move_speed;
    Players(string name, int health, int move_speed){
        Players::name = name;
        Players::health = health;
        Players::move_speed = move_speed;
        cout << "Name: " << name << "\nHealth: " << health << "\nMove Speed: " << move_speed << "\n";
    }
};
 
void screen()
{
    system("cls");
    cout << "Please select action:\n1) Add new player\n2) View all players\n";
}
 
void main()
{
    list<Players*> players;
    //list<Players*>* players = new list<Players*>();
    string temp_name;
    string temp_health;
    string temp_move_speed;
    char key = ' ';
    screen();
        while(key != VK_ESCAPE)
         {
            
            if(_kbhit())
            {
                key = _getch();
 
                switch(key)
                {
                case '1':
                    system("cls");
                    cout << "Enter name: ";
                    getline (cin,temp_name);
                    cout << "Enter health: ";
                    getline (cin, temp_health);
                    cout << "Enter move speed: ";
                    getline (cin, temp_move_speed);
                    players.push_back(new Players(temp_name, atoi(temp_health.c_str()), atoi(temp_move_speed.c_str())));
                    cout << "Player succesful added!";
                    _getch();
                    screen();
                    break;
                case '2':
                     for (list<Players*>::iterator it = players.begin(); it != players.end(); it++){
                        cout << *it << " ";
                     }
                    break;
                }
            }
        }
}
*it выводит адрес в памяти.
Вопрос: Как вывести члены класса (name, health, move_speed)?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2012, 16:04     Итераторы
Посмотрите здесь:

Итераторы и обратные итераторы C++
Итераторы C++
Итераторы в C++ C++
Итераторы С++ C++
C++ Итераторы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
27.05.2012, 16:19     Итераторы #2
Нужно определить поток вывода для объекта Players. Компилятор же не знает, что это такое.
Sheppard
1 / 1 / 0
Регистрация: 27.05.2012
Сообщений: 48
27.05.2012, 16:22  [ТС]     Итераторы #3
Цитата Сообщение от MrGluck Посмотреть сообщение
Нужно определить поток вывода для объекта Players. Компилятор же не знает, что это такое.
Собственно говоря, можете показать пример определения потока вывода?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
27.05.2012, 17:30     Итераторы #4
Поток определять не надо, надо сделать друга твоего класса с двумя операндами, левым должне быть поток, а правым твой объект и в этом друге выведи свой объект по частям. Например
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class TVector
{
 public:
  float x;
  float y;
  float z;
 friend ostream & operator << (ostream &s, TVector & x);
};
ostream & operator << (ostream &s, TVector & x)
{
 s<<"("<<x<<", "<<y<<", "<<z<<")";
 return s;
}
. Поток же вывода должен быть один. Ну в крайнем случае по одному на файл + поток для чепотара + поток для консоли. Но на консоли ровно один.
Sheppard
1 / 1 / 0
Регистрация: 27.05.2012
Сообщений: 48
27.05.2012, 18:01  [ТС]     Итераторы #5
Цитата Сообщение от taras atavin Посмотреть сообщение
Поток определять не надо, надо сделать друга твоего класса с двумя операндами, левым должне быть поток, а правым твой объект и в этом друге выведи свой объект по частям. Например
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class TVector
{
 public:
  float x;
  float y;
  float z;
 friend ostream & operator << (ostream &s, TVector & x);
};
ostream & operator << (ostream &s, TVector & x)
{
 s<<"("<<x<<", "<<y<<", "<<z<<")";
 return s;
}
. Поток же вывода должен быть один. Ну в крайнем случае по одному на файл + поток для чепотара + поток для консоли. Но на консоли ровно один.
У меня не получилось воспользоваться данным примером, компилятор выдаёт кучу ошибок.
Можете написать корректно?
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
27.05.2012, 18:30     Итераторы #6
Цитата Сообщение от Sheppard Посмотреть сообщение
пример определения потока вывода
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
#include <iostream>
#include <string>
 
 
class Players{
    
    friend std::ostream & operator <<(std::ostream & ostream, Players const& players);
    
public:
    Players(std::string name, int health, int move_speed)
       :  name(name), health(health), move_speed(move_speed) {}
    
private:
    std::string name;
    int         health;
    int         move_speed;
};
 
 
std::ostream & operator <<(std::ostream & ostream, Players const& players) {
   ostream << "Name: " << players.name << "\nHealth: "
      << players.health << "\nMove Speed: " << players.move_speed << "\n";
   return ostream;
}
 
 
int main() {
   std::cout << Players("name", 100, 55);
}
http://liveworkspace.org/code/ef238c...58322a890be76c
Yandex
Объявления
27.05.2012, 18:30     Итераторы
Ответ Создать тему
Опции темы

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