0 / 0 / 1
Регистрация: 06.01.2018
Сообщений: 16
1

Наследование / Вектор или массив?

14.01.2018, 23:10. Показов 1879. Ответов 6
Метки нет (Все метки)

Добрый вечер!

В программе нужно создать базовый класс и его классы-наследники.

Базовый класс - Игра, в котором указано, что будет какой-то массив/вектор "Команды", который состоит из объектов типа "Команда".

C++
1
std::vector<Komanda> komandy;
Размер Команды варьируется в зависимости от того, какая это игра (1/8 - 10 команд, 1/4 - 5 команд, 1/2 - 3 команды, финал - 2 команды).

Подскажите, пожалуйста, как мне осуществить изменение длины массива/вектора в классах-наследниках
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Igra1_8 (
// std::vector<Komanda> komandy; строго 10 команд
) : Igra (
komandy
) {
this->komanda ???
}
}
 
Igra1_4: Igra (
// std::vector<Komanda> komandy; строго 5 команд
)
 
Igra1_2: Igra (
// std::vector<Komanda> komandy; строго 3 команды
)
 
IgraFinal: Igra (
// std::vector<Komanda> komandy; строго 2 команды
)
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.01.2018, 23:10
Ответы с готовыми решениями:

Что лучше массив или вектор?
что лучше использовать массив или vector?

Как создать массив или вектор размера больше чем 0x7fffffff?
Вопрос вот в чем.. максимальная разрядность сетки блоков нитей 2^31-1 на GPU (используя CUDA на...

Создать массив или вектор того типа, на который ссылается указатель
Доброго времени суток. Есть следующая функция template &lt;typename...

Реализовать функцию, считывающую из файла числа до конца, и добавляющую их в вектор (или в массив)
Друзья, советуйте! Чтение из файла как процедура/функция -- важно. Спасибо Задача: Функция,...

6
"C with Classes"
1581 / 1360 / 511
Регистрация: 16.08.2014
Сообщений: 5,647
Записей в блоге: 1
14.01.2018, 23:27 2
Лучший ответ Сообщение было отмечено MrGluck как решение

Решение

Anatoliy2017,
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
#include <vector>
 
class Team {};
 
class IgraBase
{
private:
    std::vector<Team> vector;
 
public:
    IgraBase(size_t size = 0) : vector(size) {}
};
 
class Igra1_8 : public IgraBase
{
public:
    Igra1_8() : IgraBase(10) {}
};
 
class Igra1_4 : public IgraBase
{
public:
    Igra1_4() : IgraBase(5) {}
};
 
class Igra1_2 : public IgraBase
{
public:
    Igra1_2() : IgraBase(3) {}
};
 
class IgraFinal : public IgraBase
{
public:
    IgraFinal() : IgraBase(2) {}
};
1
68 / 56 / 14
Регистрация: 20.12.2013
Сообщений: 551
15.01.2018, 00:27 3
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
#include <vector>
 
class Komanda
{
    
};
 
class Igra_base
{
 std::vector<Komanda> komandy;
 public:
    enum class type : unsigned { one_eighth = 10, one_fourth = 5, half = 3, finale = 2 };
    Igra_base(const type n) :komandy(size_t(n)) {};
};
 
template <Igra_base::type t= Igra_base::type::one_eighth>
class Igra: Igra_base
{
public:
    Igra() : Igra_base(t)
    {};
};
 
 
int main()
{
    Igra<Igra_base::type::half> ii;
};
1
0 / 0 / 1
Регистрация: 06.01.2018
Сообщений: 16
16.01.2018, 17:45  [ТС] 4
Спасибо огромное за ответы!

Подскажите еще, пожалуйста.
Если у меня вот так:
C++
1
2
std::vector<Komanda> komandy; // массив команд типа Komanda
Komanda* pobeditel; // победитель (можно ли сделать ссылку на команду-победителя??)
То как мне правильно написать в конструкторе по умолчанию (без параметров)?
C++
1
2
3
4
5
6
Igra()
    {
        this->nazvanieigry = "Первая игра сезона";
        this->komandy = ????????; // какое количество команд сделать по-умолчанию? максимально возможное? и как их задать здесь? new Komanda[5]?
                this->pobeditel = ????; // указать null - нет ссылки? 
    }
Или не делать конструктор по умолчанию, а сделать только сразу конструктор с параметрами (так можно?):
C++
1
2
3
4
5
6
Igra(std::string nazvanieigry, std::vector<Komanda> komandy, Komanda* pobeditel)
    {
        this->nazvanieigry = nazvanieigry;
        this->komandy = komandy;
        this->pobeditel = pobeditel;
    }
Добавлено через 17 часов 50 минут
Помогите, пожалуйста. Завис на этом вопросе. Не могу найти решение.

Добавлено через 7 минут
Может я вообще не так все делаю.

У меня должен быть класс Игра, который состоит из:
- разные string и int (название игры, дата проведения и т.д.)
- вектора объектов типа Команда
- вектор объектов типа Эксперты
- указатель? на команду-победителя
?? должны быть классы-наследники - типы игр (1/8, 1/4, 1/2, финал)...

В свою очередь, Команда тоже состоит из:
- разные string и int (название команды, количество человек в команде и т.д.)
- вектора объектов типа Ученик // каждая команда состоит не менее, чем из 2 участников
- вектор оценок int от Экспертов
- указатель? на капитана команды
* Размер Команды варьируется в зависимости от того, какая это игра (1/8 - 10 команд, 1/4 - 5 команд, 1/2 - 3 команды, финал - 2 команды).

В свою очередь, Ученик и Эксперт - классы-наследники Человек:
- разные string и int (ФИО, дата рождения и т.д.)

Добавлено через 1 час 26 минут
Спасибо! А как мне добавить сюда же изменение размера вектора "Судьи"?

Добавлено через 1 минуту
Цитата Сообщение от _stanislav Посмотреть сообщение
Anatoliy2017,
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
#include <vector>
 
class Team {};
 
class IgraBase
{
private:
    std::vector<Team> vector;
 
public:
    IgraBase(size_t size = 0) : vector(size) {}
};
 
class Igra1_8 : public IgraBase
{
public:
    Igra1_8() : IgraBase(10) {}
};
 
class Igra1_4 : public IgraBase
{
public:
    Igra1_4() : IgraBase(5) {}
};
 
class Igra1_2 : public IgraBase
{
public:
    Igra1_2() : IgraBase(3) {}
};
 
class IgraFinal : public IgraBase
{
public:
    IgraFinal() : IgraBase(2) {}
};
Спасибо! А как мне добавить сюда же изменение размера вектора "Судьи"?
0
"C with Classes"
1581 / 1360 / 511
Регистрация: 16.08.2014
Сообщений: 5,647
Записей в блоге: 1
16.01.2018, 18:00 5
Anatoliy2017, дружище, бери ношу по себе чтоб не падать при ходьбе, если я все за тебя сделаю, лучше не станет.
начни с простых вещей, ты далек от того что ты задумал. к тому же ты толком не можешь объяснить чего ты хочешь.
1
0 / 0 / 1
Регистрация: 06.01.2018
Сообщений: 16
16.01.2018, 18:09  [ТС] 6
Цитата Сообщение от _stanislav Посмотреть сообщение
Anatoliy2017, дружище, бери ношу по себе чтоб не падать при ходьбе, если я все за тебя сделаю, лучше не станет.
начни с простых вещей, ты далек от того что ты задумал. к тому же ты толком не можешь объяснить чего ты хочешь.
Дак это я уже понял... Но сдать задание все-равно нужно, поэтому пытаюсь сделать максимально хорошо для моего уровня знаний... В любом случае, спасибо за помощь! Предыдущие сообщения и так очень сильно помогли!
0
Падаван С++
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
16.01.2018, 18:55 7
Anatoliy2017,Anatoliy2017,
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
class Team{
    //....
};
 
class Game {
 
    private:
        std::vector<Team> teams;
 
    public:
 
        Game(int size) {
            teams.resize(size);
        }
 
        //.. тут методы работы с командой
};
 
class Quater : public Game {
 
    public:
        Quater() : Game(8) { // четвертьфинал 8 команд
 
        }
 
};
 
 
class Half : public Game {
 
    public:
        Half() : Game(4) { // полуфинал 4 команды
 
        }
 
};
 
class Final : public Game {
 
    public:
        Final() : Game(2) { // в финале 2 команды
 
        }
 
};
по простому так можно

Добавлено через 3 минуты
Anatoliy2017, ну или как то так понаркоманить

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
#include <array>
 
 
class Team{
    //....
};
 
template<int size> class Game {
 
    private:
        std::array<Team, size> teams;
 
    public:
 
        Game(int size) {
            teams.resize(size);
        }
 
        //.. тут методы работы с командой
};
 
typedef Game <8> Quater; // задаем размеры команд
typedef Game <4> Half;
typedef Game <2> Final;
хотя это глупое задание если не меняется поведение классов при разных размерах

Добавлено через 9 минут
Anatoliy2017, вот так еще можно
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
#include <array>
#include <iostream>
 
class Team{
    //....
};
 
class Quater {
    public:
        static const int teamSize = 8;
    //тут уникальное поведение для классов пишем
};
 
class Half {
    public:
        static const int teamSize = 4;
 
    //тут уникальное поведение для классов пишем
};
 
class Final {
    public:
        static const int teamSize = 2;
    //тут уникальное поведение для классов пишем
};
 
 
template<class GamePolicy>
class Game : public GamePolicy {
 
    private:
        std::array<Team, GamePolicy::teamSize> teams;
    public:
 
        void teamSize() {
            std::cout << teams.size();
        }
 
};
 
typedef Game<Quater> QuaterGame;
typedef Game<Half> HalfGame;
typedef Game<Final> FinalGame;
 
int main() {
    QuaterGame game;
    game.teamSize();
 
    return 0;
}
Добавлено через 22 секунды
вообщем накидал вариантов выбирайте что хотите, а так их тьма

Добавлено через 14 минут
Anatoliy2017, по поводу класса победителя, сделайте понятие в команде "нулевой объект"
и получться вам просто надо будет проверить если это не нулевой объект то есть поебдитель
допустим там метод есть

C++
1
2
3
4
5
6
7
Team findWinnerTeam(Team& a, Team& b){
 
    if(/*условие кто победил*/)
 
 
    return Team();//если никто то возвращаем пустую команду у которой есть метод isNull
}
незнаю как то отрывисто просите помощь и я не совсем если что понял что хотите, поэтому помогаю так как понимаю
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.01.2018, 18:55
Помогаю со студенческими работами здесь

Наследование. Вектор на плоскости
В производном классе создайте несколько конструкторов, деструкторов. Не забывайте, что в...

Наследование класса Вектор
Помогите написать прогу плииззз.... Разработать класс NormVector – вектор единичной длины,...

Вектор пользовательского типа данных + наследование
Доброго времени суток. Дело в чём: #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std;...

Наследование и полиморфизм (класс вектор и матрица)
Есть такая операция для вектора: Vector mathobj::operator+(const Vector &amp;v1, const Vector &amp;v2) {...

Записать числа из файла в двумерный массив или вектор вроде такого vector<vector<int>>
Добрый день, подскажите пожалуйста как лучше и проще считывать файл. в файле записаны числа,...

Используя в подпрограмме массив или строку открытого типа преобразовать матрицу целых чисел в вектор и наборот
Используя в подпрограмме массив или строку открытого типа преобразовать матрицу целых чисел в...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru