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

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

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

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

27.05.2012, 16:04. Просмотров 579. Ответов 5
Метки нет (Все метки)

Добрый день!
Начал изучать классы в 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++
C++ Итераторы
итераторы си++ C++
итераторы C++
C++ Итераторы
C++ Итераторы С++
C++ Итераторы

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт CЭксперт С++
6676 / 3857 / 511
Регистрация: 29.11.2010
Сообщений: 10,217
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
Ушёл с форума.
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!
1256 / 1139 / 55
Регистрация: 21.04.2012
Сообщений: 2,361
Завершенные тесты: 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     Итераторы
Ответ Создать тему
Опции темы

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