Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
frostua
0 / 0 / 2
Регистрация: 07.11.2011
Сообщений: 27
#1

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

03.12.2011, 23:10. Просмотров 882. Ответов 17
Метки нет (Все метки)


http://www.cyberforum.ru/cpp-beginners/thread1240169.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2011, 23:10
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Можно ли как-то инициализировать массив? (C++):

Как (можно ли) инициализировать переменную в структуре?
Как пример struct cifri { char one="ONE"; }; Почему так нельзя и как...

Нюансы работы со строками: как в C++ можно объявлять и инициализировать строки?
Добрый день! Подскажите пожалуйста, как в 17-ой строке присвоить слово? Один...

Как инициализировать массив в классе
private: static char const figury_={0,4,0,0, 0,1,0,3, ...

Как инициализировать массив переменной
Всем доброго времени суток! у меня возникла проблема, мне нужно...

Как инициализировать массив ссылок?
//---------------------------------------------------------------------------...

17
Gepar
1181 / 537 / 77
Регистрация: 01.07.2009
Сообщений: 3,517
03.12.2011, 23:22 #2
frostua, ну тебе стоит добавить set и get методы в digit (или сделать класс Array другом digit и обращаться к a и b в digit напрямую) так как просто вызвать конструктор digit не получиться. Хотя друг как-то решал подобную проблему и даже решил её, но работало это ТОЛЬКО в vs2008 (в 2010 уже не запускалось) и использовало какие-то ms хитрости.
0
sandye51
программист С++
833 / 592 / 147
Регистрация: 19.12.2010
Сообщений: 2,016
03.12.2011, 23:29 #3
frostua, можно как угодно. Но лучше это делать исходя из вашей задачи, которая не известна. Что дальше хотите сделать?
0
Gepar
1181 / 537 / 77
Регистрация: 01.07.2009
Сообщений: 3,517
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);
        }
};
1
Kidasov
77 / 77 / 34
Регистрация: 02.12.2011
Сообщений: 965
Записей в блоге: 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;
}
0
frostua
0 / 0 / 2
Регистрация: 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++]=
};
0
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,230
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;
}
0
frostua
0 / 0 / 2
Регистрация: 07.11.2011
Сообщений: 27
04.12.2011, 00:19  [ТС] #8
Gepar
да идея с массивом указателей неплохая

Добавлено через 3 минуты
ладно, оставлю до завтра, выберу один из вариантов, если есть какие-то ещё идеи пишите. Спасибо за ответы
0
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 для каждого элемента будут равны нулям
};
0
sandye51
04.12.2011, 00:34
  #10

Не по теме:

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

0
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);
    }
};
0
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,230
04.12.2011, 01:17 #12
Bers, это хорошо, когда весь массив должен значениями по умолчанию инициализироваться. Задача была, на сколько я понял, инициализировать элементы разными значениями.

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

Не по теме:

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

0
easybudda
04.12.2011, 01:44
  #14

Не по теме:

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

0
frostua
0 / 0 / 2
Регистрация: 07.11.2011
Сообщений: 27
04.12.2011, 11:54  [ТС] #15
Bers
а почему не хочет работать если не указывать значения по умолчанию в конструкторе digit (int a_=0, int b_=0)
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  
                 //откуда компилятор узнает, 
                 //какие аргументы нужно запихать в конструктор, 
                 //что бы создавать элементы массива
                 //если он не принимает значений по умолчанию?
                 //думаешь, он телепат?
0
frostua
0 / 0 / 2
Регистрация: 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;
}
0
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 содержат мусор?
}
0
04.12.2011, 21:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2011, 21:32
Привет! Вот еще темы с решениями:

Как инициализировать массив строк?
Здравствуйте, подскажите как инициализировать массив строк, кол-во строк...

Как инициализировать массив в dll ?
Экспериментирую с dll. Сделал графическую функцию, которая рассчитывает...

Как инициализировать массив чисел в С++?
Помогите пожалуйста, проблема следующая: в классе Eleve нужно инициализировать...

Как инициализировать двумерный массив?
подскажите как инициализировать двумерный массив long long int mass;


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

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

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