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

Можно ли как-то инициализировать массив? - C++

Восстановить пароль Регистрация
 
frostua
0 / 0 / 0
Регистрация: 07.11.2011
Сообщений: 27
03.12.2011, 23:10     Можно ли как-то инициализировать массив? #1
Можно ли как-то инициализировать массив ar?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class digit
{
    int a, b;
public:
    digit (int a_, int b_)
    {
        a=a_;
        b=b_;
    }
};
 
class Array
{
    digit ar [10];
public:
    Array()
    {
        ...
    };
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
03.12.2011, 23:22     Можно ли как-то инициализировать массив? #2
frostua, ну тебе стоит добавить set и get методы в digit (или сделать класс Array другом digit и обращаться к a и b в digit напрямую) так как просто вызвать конструктор digit не получиться. Хотя друг как-то решал подобную проблему и даже решил её, но работало это ТОЛЬКО в vs2008 (в 2010 уже не запускалось) и использовало какие-то ms хитрости.
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
03.12.2011, 23:29     Можно ли как-то инициализировать массив? #3
frostua, можно как угодно. Но лучше это делать исходя из вашей задачи, которая не известна. Что дальше хотите сделать?
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
03.12.2011, 23:29     Можно ли как-то инициализировать массив? #4
Ещё можно вот так сделать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class digit
{
        int a, b;
public:
        digit (int a_, int b_)
        {
                a=a_;
                b=b_;
        }
};
 
class Array
{
        digit *ar[10];
 
public:
        Array()
        {
            for (int i=0;i<10;i++)
             ar[i]=new digit(i,i*2);
        }
};
Kidasov
76 / 76 / 12
Регистрация: 02.12.2011
Сообщений: 966
Записей в блоге: 3
03.12.2011, 23:56     Можно ли как-то инициализировать массив? #5
А почему бы не наследовать класс Digit?

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
#include <iostream>
using namespace std;
 
class digit
{
public:
  int a;
  int b;
  void setDigit(int a_, int b_) { a = a_; b = b_; }
};
 
class Array : public digit
{
  digit ar [10];
public:
  Array();
  void show();
        
};
 
Array::Array()
{
  for (int i=0; i<10; i++)
  {
    ar[i].setDigit(i,i+1);
  }
}
 
void Array :: show()
{
  for (int i=0; i<10; i++)
  {
    cout<<"array["<<i<<"] = "<<ar[i].a<<"  "<<ar[i].b<<"\n";
  }
}
 
int main()
{
  Array a;
  a.show();
  return 0;
}
frostua
0 / 0 / 0
Регистрация: 07.11.2011
Сообщений: 27
04.12.2011, 00:09  [ТС]     Можно ли как-то инициализировать массив? #6
Цитата Сообщение от sandye51 Посмотреть сообщение
frostua, можно как угодно. Но лучше это делать исходя из вашей задачи, которая не известна. Что дальше хотите сделать?
Вообще хочу реализовать игру блэк джек, здесь я привел только схему, будут ещё классы игрок и диллер, карта может инициализироваться только один раз, вот основной код
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
#include <iostream>
using namespace std;
 
class Card
{
    int Suit;//масть от 3 до 6 включительно
    int Rank;//ранг карты от 1 до 13 включительно, 11-13 - картинки
public:
    Card(int suit, int rank)
    { 
        if (suit<3 || suit>6){cout<<"Error, Suit shold be in the enterval 3 - 6"; exit(1);}
        else Suit=suit;
        if (rank<1 || rank>13){cout<<"Error, Rank shold be in the enterval 1 - 13"; exit(1);}
        else Rank=rank;
    }
    void Show()
    {
        cout<<(char)Suit;
        if (Rank>1 && Rank<11) cout<<Rank;
        else if (Rank==1) cout<<(char)65;
        else if (Rank==11) cout<<(char)74;
        else if (Rank==12) cout<<(char)81;
        else if (Rank==13) cout<<(char)75;
    }
    int Get_rank () {return Rank;}
 
};
 
class Deck
{
    enum {N = 52};
    Card deck[N];
public:
 
    Deck()
    {
        int n=0;
        for (int i=3; i<=6; i++)
            for (int j=1; j<=13; j++)
                deck[n++]=
};
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
04.12.2011, 00:14     Можно ли как-то инициализировать массив? #7
Вот так отработало, но это не совсем то, что нужно...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
class Digit {
    int a;
    int b;
public:
    Digit(int a_ = 0, int b_ = 0) : a(a_), b(b_) {}
    friend std::ostream & operator << ( std::ostream & ost, const Digit & d ) {
        ost << "A = " << d.a << " B = " << d.b << std::endl;
        return ost;
    }
};
 
int main(){
    const int COUNT(3);
    Digit * arr[COUNT] = { new Digit(13, 69), new Digit(11, 14), new Digit(33, 66) };
    for ( int i = 0; i < COUNT; ++i )
        std::cout << *arr[i];
    return 0;
}
frostua
0 / 0 / 0
Регистрация: 07.11.2011
Сообщений: 27
04.12.2011, 00:19  [ТС]     Можно ли как-то инициализировать массив? #8
Gepar
да идея с массивом указателей неплохая

Добавлено через 3 минуты
ладно, оставлю до завтра, выберу один из вариантов, если есть какие-то ещё идеи пишите. Спасибо за ответы
Bers
Заблокирован
04.12.2011, 00:25     Можно ли как-то инициализировать массив? #9
C++
1
2
3
4
5
6
7
8
9
10
11
class digit
{
    int a, b;
public:
    digit (int a_=0, int b_=0):a(a_), b(b_) { }
};
 
class Array
{
    digit ar[10]; //а и b для каждого элемента будут равны нулям
};
sandye51
04.12.2011, 00:34
  #10

Не по теме:

easybudda, а удалять память кто будет)

Bers
Заблокирован
04.12.2011, 01:15     Можно ли как-то инициализировать массив? #11
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
class digit
{
    int a, b;
public:
    digit (int a_=0, int b_=0){    set(a_,b_);  } //чуть чуть поправил. 
                                                  //Так медленнее, 
                                                  //но лучше в сопровождении
 
    void set(int a_, int b_) { a=a_; b=b_; }
};
 
class Array
{
    digit ar[2];
public:
    Array()
    {
        //можно так:
        ar[0]= digit(1, 2);
        ar[1]= digit(3, 6);
 
        //А можно так (так быстрее):
        ar[0].set(22,22);
        ar[1].set(33,3);
    }
};
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
04.12.2011, 01:17     Можно ли как-то инициализировать массив? #12
Bers, это хорошо, когда весь массив должен значениями по умолчанию инициализироваться. Задача была, на сколько я понял, инициализировать элементы разными значениями.

sandye51, по-хорошему надо бы, конечно, но раз уж сразу после вывода всё веселье и заканчивается, решил - чёрт с ней, сама освободится...
Bers
04.12.2011, 01:19
  #13

Не по теме:

easybudda, так я ж выложил вариант, когда нужно модифицировать массив

easybudda
04.12.2011, 01:44
  #14

Не по теме:

Цитата Сообщение от Bers Посмотреть сообщение
easybudda, так я ж выложил вариант, когда нужно модифицировать массив
Ну это к первому вашему посту было.

frostua
0 / 0 / 0
Регистрация: 07.11.2011
Сообщений: 27
04.12.2011, 11:54  [ТС]     Можно ли как-то инициализировать массив? #15
Bers
а почему не хочет работать если не указывать значения по умолчанию в конструкторе digit (int a_=0, int b_=0)
Bers
Заблокирован
04.12.2011, 15:39     Можно ли как-то инициализировать массив? #16
Цитата Сообщение от frostua Посмотреть сообщение
а почему не хочет работать если не указывать значения по умолчанию в конструкторе digit (int a_=0, int b_=0)
C++
1
2
3
4
5
6
7
digit ar[2]; //вот здесь ты создаёшь массив из двух элементов.
                 //массив, типа digit  
                 //откуда компилятор узнает, 
                 //какие аргументы нужно запихать в конструктор, 
                 //что бы создавать элементы массива
                 //если он не принимает значений по умолчанию?
                 //думаешь, он телепат?
frostua
0 / 0 / 0
Регистрация: 07.11.2011
Сообщений: 27
04.12.2011, 21:10  [ТС]     Можно ли как-то инициализировать массив? #17
Можно просто объявить конструктор по умолчанию и не присваивать никаких начальных значений и все компилится нормально. Зачем он тогда нужен этот конструктор по умолчанию. Вот пример:
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
class digit
{
    int a, b;
public:
    digit (){}
    digit (int a_, int b_){    set(a_,b_);  } 
                                                 
    void set(int a_, int b_) { a=a_; b=b_; }
};
 
class Array
{
    digit ar[2];
public:
    Array()
    {
 
        ar[0]= digit(1, 2);
        ar[1]= digit(3, 6);
 
        ar[0].set(22,22);
        ar[1].set(33,3);
    }
};
 
void main()
{
    Array a;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2011, 21:32     Можно ли как-то инициализировать массив?
Еще ссылки по теме:

Можно ли инициализировать динамический массив не используя цикл? C++
Как инициализировать массив в классе C++
C++ Как инициализировать массив ссылок?

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

Или воспользуйтесь поиском по форуму:
Bers
Заблокирован
04.12.2011, 21:32     Можно ли как-то инициализировать массив? #18
Цитата Сообщение от frostua Посмотреть сообщение
Можно просто объявить конструктор по умолчанию и не присваивать никаких начальных значений и все компилится нормально.
Конечно можно. При условии, что ты знаешь, что делаешь, и можешь ответить на следующий вопрос:

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
class digit
{
    int a, b;
public:
        digit (){}
    digit (int a_, int b_){    set(a_,b_);  } 
                                                 
    void set(int a_, int b_) { a=a_; b=b_; }
};
 
class Array
{
    digit ar[2];
public:
    Array()
    {
 
        ar[0]= digit(1, 2);
        ar[1]= digit(3, 6);
 
        ar[0].set(22,22);
        ar[1].set(33,3);
    }
};
 
void main()
{
        Array a;
        digit test; //почему данные члены test содержат мусор?
}
Yandex
Объявления
04.12.2011, 21:32     Можно ли как-то инициализировать массив?
Ответ Создать тему
Опции темы

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