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

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

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

Author24 — интернет-сервис помощи студентам
Можно ли как-то инициализировать массив 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()
    {
        ...
    };
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.12.2011, 23:10
Ответы с готовыми решениями:

Можно ли инициализировать динамический массив не используя цикл?
Когда создавали статический массив, можно было сделать так: int array={1,5,14,23,32,45,67}; Можно...

Можно ли создать,инициализировать,использовать массив в 1 строчке
Просто иногда хочется написать return new int={i,j}; может быть всё таки есть способ как то...

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

Как можно инициализировать потоки исполнителя
Как можно идентифицировать потоки исполнителя в с++. Кто знает и может рассказать? Спасибо. ...

17
1186 / 542 / 78
Регистрация: 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
программист С++
860 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014
03.12.2011, 23:29 3
frostua, можно как угодно. Но лучше это делать исходя из вашей задачи, которая не известна. Что дальше хотите сделать?
0
1186 / 542 / 78
Регистрация: 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
80 / 79 / 35
Регистрация: 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;
}
0
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++]=
};
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,748
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
0 / 0 / 0
Регистрация: 07.11.2011
Сообщений: 27
04.12.2011, 00:19  [ТС] 8
Gepar
да идея с массивом указателей неплохая

Добавлено через 3 минуты
ладно, оставлю до завтра, выберу один из вариантов, если есть какие-то ещё идеи пишите. Спасибо за ответы
0
Заблокирован
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
Заблокирован
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
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,748
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
0 / 0 / 0
Регистрация: 07.11.2011
Сообщений: 27
04.12.2011, 11:54  [ТС] 15
Bers
а почему не хочет работать если не указывать значения по умолчанию в конструкторе digit (int a_=0, int b_=0)
0
Заблокирован
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
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;
}
0
Заблокирован
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.12.2011, 21:32
Помогаю со студенческими работами здесь

Как можно инициализировать матрицу в разделе var
было такое задание на лаб.работе. в разделе var символами '*' задана матрица A размером 8*8....

Как инициализировать массив?
Ну я новичок в MS Visual C++ так что при написании оконного приложения у меня возникла такая...

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

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


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

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

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