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

Проблема с композицией - C++

Восстановить пароль Регистрация
 
Ксюшк@
0 / 0 / 0
Регистрация: 02.06.2010
Сообщений: 17
23.10.2011, 19:06     Проблема с композицией #1
мне надо создать карту и используя композицию-колоду карт.при этом конструкторы должны инициализировать колоду упорядоченно и в разброс.я попыталась инициализировать в разброс,но не понимаю в чем ошибка.помогите пожалуйста!
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
{ class karta{
public:
int mast;
int zvan;
 
};
class koloda{
 
int i,karti[36],k,a;
public:
koloda()
{
 for(i=0;i<36;i++)
 {
   this->k=new  karta();
   randomize;
   k.mast=random(3)+1;
   k.zvan=random(9)+6;
   for(a=0;a<i;a++)
   {
      if (k==karti[a]) {i--;}
      else
   {karti[i]=k;}
   }
 }
}
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
tula555
-15 / 0 / 0
Регистрация: 16.10.2011
Сообщений: 65
23.10.2011, 20:01     Проблема с композицией #2
getchar; в конце попробуй поставить
Ксюшк@
0 / 0 / 0
Регистрация: 02.06.2010
Сообщений: 17
23.10.2011, 20:05  [ТС]     Проблема с композицией #3
компилятор пишет,что не может конвертировать karta в int*. и выражение k.mast, k.zvan вызывают у него недовольство. вряд ли getchar меня спасет
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
23.10.2011, 22:01     Проблема с композицией #4
Цитата Сообщение от Ксюшк@ Посмотреть сообщение
выражение k.mast, k.zvan
k не является экземпляром класса Карта. Поэтому и нельзя так обратится к полям класса
k также не является указателем, поэтому нельзя выделить под него память оператором new
Для генерации случайных чисел используются функции rand и srand
Ксюшк@
0 / 0 / 0
Регистрация: 02.06.2010
Сообщений: 17
23.10.2011, 22:03  [ТС]     Проблема с композицией #5
Цитата Сообщение от aeshes Посмотреть сообщение
k не является экземпляром класса Карта. Поэтому и нельзя так обратится к полям класса
k также не является указателем, поэтому нельзя выделить под него память оператором new
Для генерации случайных чисел используются функции rand и srand
а как тогда инициализировать колоду и при этом использовать композицию?
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
23.10.2011, 22:13     Проблема с композицией #6
Ксюшк@, в принципе у Вас там многое неправильно, но вот так колоду перемешивать уж совсем никуда не годится. Правильнее к упорядоченному массиву алгоритм random_shuffle применить. http://www.cplusplus.com/reference/a...andom_shuffle/
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
23.10.2011, 22:15     Проблема с композицией #7
В классе колода должен быть только массив карт, в крайнем случае - их количество, если оно может меняться. Никаких k, a, i и т.п. в классе Колода быть не должно.
Если рассматривать такую, реализацию, как у вас, то примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class karta
{
public:
int mast;//1-червы, 2 - бубны, 3-трефы, 4- пики
int zvan;//1-шестерки,...,9-туз
};
 
class koloda{
 
int karti[36];
public:
koloda()//заполняет попорядку
{
   for(int i=0;i<36;i++)
   {
       karta[i].mast=i/9+1;
       karta[i].zvan=i%9+1;
    }
};
но вообще-то, с точки зрения ООП, такая архитектура классов как-то не комильфо...
Ксюшк@
0 / 0 / 0
Регистрация: 02.06.2010
Сообщений: 17
23.10.2011, 22:21  [ТС]     Проблема с композицией #8
Спасибо за идею) Осталась одна проблема-как задать упорядоченный массив,если ,как я поняла,я не могу обратиться к полям одного класса в другом классе?

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
class koloda{
 
int karti[36];
public:
koloda()//заполняет попорядку
{
   for(int i=0;i<36;i++)
   {
       karta[i].mast=i/9+1;
       karta[i].zvan=i%9+1;
    }
};
а где здесь композиция?и как я могу написать karti[i].mast если это поля разных,не связанных классов?или могу?
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
23.10.2011, 23:03     Проблема с композицией #9
Ксюшк@, композиция - это то, что в классе Колода у вас есть массив из объектов класса Карта (karti[36]). И поэтому вы можете обратится к полям каждой карты из этого массива внутри методов класса Колода
Ксюшк@
0 / 0 / 0
Регистрация: 02.06.2010
Сообщений: 17
23.10.2011, 23:06  [ТС]     Проблема с композицией #10
если это массив из класса Карта,наверно я не должна писать перед ним int? или кашу маслом не испортишь?)
спасибо за помощь)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2011, 23:29     Проблема с композицией
Еще ссылки по теме:

C++ проблема с cgcg.h
C++ Объясните на данном примере как работать с композицией

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

Или воспользуйтесь поиском по форуму:
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
23.10.2011, 23:29     Проблема с композицией #11
Ксюшк@, да, массив должен иметь тип karta, забыла поправить в прошлом варианте, смотрела только на функцию, извини

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class karta
{
public:
int mast;//1-червы, 2 - бубны, 3-трефы, 4- пики
int zvan;//1-шестерки,...,9-туз
};
 
class koloda{
 
karta karti[36];
public:
koloda()//заполняет попорядку
{
   for(int i=0;i<36;i++)
   {
       karti[i].mast=i/9+1;
       karti[i].zvan=i%9+1;
    }
};
Yandex
Объявления
23.10.2011, 23:29     Проблема с композицией
Ответ Создать тему
Опции темы

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