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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
xADMIRALx
67 / 61 / 1
Регистрация: 09.06.2012
Сообщений: 291
#1

Проинициализировать класс массивов который имеет конструктор по умолчанию - C++

07.07.2012, 22:58. Просмотров 1199. Ответов 21
Метки нет (Все метки)

Или я не знаю как правельно спрасить у гуглы,или это не возможно,кто знает как можно реализовать такое
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class a
{
int q,w,e;
    a(int b)
{
  q = w = e = b;
}
};
 
int main()
{
   a seliimasiv[500](4);//вот тут та и ошибка;Как можно проинициализировать его ?
a seliimasiv[500] = 4; 
 
 
 
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.07.2012, 22:58     Проинициализировать класс массивов который имеет конструктор по умолчанию
Посмотрите здесь:

Класс Date, определив в нем конструктор по умолчанию - C++
Нужно доработать разработанный ранее класс Date, определив в нем конструктор по умолчанию, создающий «дату по умолчанию» (например,...

Разработать класс матрица, конструктор по умолчанию, вывод на экран - C++
Разработать класс матрица, конструктор по умолчанию, вывод на экран Вроде бы разработала но не работает. подскажите, в чем проблема? ...

Создать класс Point, который имеет два закрытых члена класса (координаты) - C++
Помогите плиз код написать. Я чёт не очень понимаю в классах. Создайте класс Point, который имеет два закрытых члена класса...

От класса String наследовать новый класс, который имеет проверку на превышение размера строки - C++
Доброго времени суток! Решаю задачи из учебника Роберта Лафоре ООП в C++. До этой задачи все решал сам и успешно, а тут встал в...

Конструктор по умолчанию - C++
Здраститя. #include <iostream> using namespace std; class random { public: random(int b){a=b;} ~random(){} int...

Конструктор по умолчанию - C++
Я то ли динамику недопоняла, то ли классы, то ли конструктор... И теперь совсем запуталась. Что нужно написать в конструкторе без...

Конструктор по умолчанию - C++
Доброе утро! При попытке доступа к данным-элементам объекта, созданного конструктором по умолчанию, программа загибается. Возникло...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6419 / 3058 / 302
Регистрация: 04.12.2011
Сообщений: 8,330
Записей в блоге: 3
07.07.2012, 23:17     Проинициализировать класс массивов который имеет конструктор по умолчанию #2
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
class a
{
public:
int *pArr;
int sz;
    a(int b);
a~a();
};
a::a(int b)
{
sz=b;
  p=new int[b];
}
a::~a(){
delete []a;
}
 
int main()
{
a seliimasiv =a(500);//
for(int i=0; to i<a.sz; i++){
seliimasiv.p[i] = 4; 
 }
return 0;
}
xADMIRALx
67 / 61 / 1
Регистрация: 09.06.2012
Сообщений: 291
07.07.2012, 23:29  [ТС]     Проинициализировать класс массивов который имеет конструктор по умолчанию #3
то есть вы предлогаете в каждом классе a хранить массив из классов a

можно как-нибудь по другому ?

PS код вообще не рабочий
elivin
65 / 65 / 1
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
07.07.2012, 23:41     Проинициализировать класс массивов который имеет конструктор по умолчанию #4
xADMIRALx, так вам всё-таки нужен класс массивов или массив объектов класса?
Если второй вариант, то, пожалуй, вот так (ваш же вариант переделал):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class a
{
    int q,w,e;
    public:
    a(int b)
    {
        q = b;
        w = b;
        e = b;
    }
};
 
int main()
{
    a seliimasiv[500]=4;
    return 0;
}
P.S. конструктор должен находиться в разделе public, а у классов C++ по умолчанию идёт доступ private
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6419 / 3058 / 302
Регистрация: 04.12.2011
Сообщений: 8,330
Записей в блоге: 3
07.07.2012, 23:43     Проинициализировать класс массивов который имеет конструктор по умолчанию #5
Вот так будет не так страшно:
C++
1
2
3
4
5
6
a::a(int b)
{
sz=b;
  p=new int[b];
for (int i=0; i<b; i++) p[i]=0;
}
и в классе:
C++
1
2
3
4
5
6
7
8
9
10
11
class a
{
public:
int *p;
int sz;
    a(int b);
a~a();
};
a::~a(){
delete []p;
}
невнимательно имя написал
xADMIRALx
67 / 61 / 1
Регистрация: 09.06.2012
Сообщений: 291
07.07.2012, 23:52  [ТС]     Проинициализировать класс массивов который имеет конструктор по умолчанию #6
уфф ) не то и не то

elivin
у мну проста struct поэтому не обратил внимание...да и вашь код не рабочий.
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
07.07.2012, 23:53     Проинициализировать класс массивов который имеет конструктор по умолчанию #7
std::fill же
elivin
65 / 65 / 1
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
07.07.2012, 23:59     Проинициализировать класс массивов который имеет конструктор по умолчанию #8
Цитата Сообщение от xADMIRALx Посмотреть сообщение
да и вашь код не рабочий.
Да ну? Разве что компилятору не нравится, что переменная (точнее, целый массив) объявлена, но не используется. У меня это только warring вызывает, но код рабочий (по крайней мере в gcc).

Сделал переменные q, w и e публичными и добавил строку
C++
1
std::cout <<seliimasiv[105].q << std::endl;
Вот, что выдаёт:
Миниатюры
Проинициализировать класс массивов который имеет конструктор по умолчанию  
castaway
08.07.2012, 00:07
  #9

Не по теме:

xADMIRALx, обрати внимание на то, что следует обязательно добавить библиотеки SDL_ttf, GL и GLU.





Не по теме:

Шучу конечно.

xADMIRALx
67 / 61 / 1
Регистрация: 09.06.2012
Сообщений: 291
08.07.2012, 00:10  [ТС]     Проинициализировать класс массивов который имеет конструктор по умолчанию #10
Jupiter
Ума не приложу как он тут реализовывается ?

elivin
Да точна если
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class a
{
public:
int q;
 a(int i)
{
q = i;
}
}
int main()
{
 a ss[55] = 5;
cout << ss[3].q;
return 0;
}
то все отлично,а у меня вот так :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class a
{
public:
char s[120];
int q;
a(int i,char *p)
{
memset(s,'\0',120);
q = i;
for (int a = 0; *p;a++,p++)
s[a] = *p;
}
}
 
int main()
{
 a f[22] = 2,"3f3f";//ошибка
cout << f[3].s
return 0;
}

Не по теме:


lazybiz
честно говоря не понял в чем суть шутки..%(

Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
08.07.2012, 00:14     Проинициализировать класс массивов который имеет конструктор по умолчанию #11
Цитата Сообщение от xADMIRALx Посмотреть сообщение
Ума не приложу как он тут реализовывается ?
C++
1
2
3
4
5
6
7
class test {
public:
    test(int i = 0) { }
};
//
test arr[500];
std::fill(a, a + 500, test(4));
xADMIRALx
67 / 61 / 1
Регистрация: 09.06.2012
Сообщений: 291
08.07.2012, 00:16  [ТС]     Проинициализировать класс массивов который имеет конструктор по умолчанию #12
Пасибо,только вот наверное в маем случии не поможет ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class a
{
public:
char s[120];
int q;
a(int i,char *p)
{
memset(s,'\0',120);
q = i;
for (int a = 0; *p;a++,p++)
s[a] = *p;
}
}
 
int main()
{
 a f[22] = 2,"3f3f";//ошибка
cout << f[3].s
return 0;
}
elivin
65 / 65 / 1
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
08.07.2012, 00:17     Проинициализировать класс массивов который имеет конструктор по умолчанию #13
lazybiz, сделал мой день


xADMIRALx, объявляй так:
C++
1
a f[22] = a(2, "3f3f");
Хотя у меня это warring вызывает. Лучше так:
C++
1
2
char s[]="3f3f";
a f[22] = a(2,s);
xADMIRALx
67 / 61 / 1
Регистрация: 09.06.2012
Сообщений: 291
08.07.2012, 00:25  [ТС]     Проинициализировать класс массивов который имеет конструктор по умолчанию #14
так тоже объявлял,не хочет (

Добавлено через 3 минуты
Ошибка
C++
1
2
    error C2075: per1: для инициализации массива требуются фигурные скобки      error C2539: new: для "a" отсутствует конструктор по умолчанию для инициализации массивов объектов  
    3   IntelliSense: для агрегатного объекта требуется инициализация с использованием "{...}"
elivin
65 / 65 / 1
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
08.07.2012, 00:25     Проинициализировать класс массивов который имеет конструктор по умолчанию #15
Цитата Сообщение от xADMIRALx Посмотреть сообщение
так тоже объявлял,не хочет (
Можешь весь код с таким методом объявления привести?
xADMIRALx
67 / 61 / 1
Регистрация: 09.06.2012
Сообщений: 291
08.07.2012, 00:29  [ТС]     Проинициализировать класс массивов который имеет конструктор по умолчанию #16
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <iostream>
#include <fstream>
#include <locale>
#include <stdio.h>
#include <memory.h>
 
using namespace std;
 
struct Person
{
    char NamePerson[120],FamilyPerson[120],Sex[12],Status[100];
    int Age;
    Person(char *Name,char *Family,char *sex,char *status,int age)
    {
               /*тут присваивание */
    }
};
char *GetFile(char *arg)
{
    char filedir[512];
    char NameTxtFile[] = "\\sex.txt";
    int lendir = 0,q = 0;
    memset(filedir,'\0',512);
    
        while(arg[q])
        {
            filedir[q] = arg[q];
            q++;
        }
 
    lendir = strlen(arg);
        for (int a = 0; a <= lendir;++a)
        {
 
            filedir[a] = arg[a];
                        if ( a == lendir)
                        {
                            int j = 0;
                            while(NameTxtFile[j])
                            {
                                filedir[a] = NameTxtFile[j];
                                j++;
                                a++;
                            }
                        }
            
        }
        return &filedir[0];
}
 
int main(int argc,char *argv[])
{
    setlocale(LC_ALL,".1251");
 
    char *fdir = GetFile(&argv[0][0]);
 
        Person per1[55] = Person("Паша","Петрович","Мальчик","Свободен",15);
 
 
 
 
    system("PAUSE");
    return 0;
}
elivin
65 / 65 / 1
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
08.07.2012, 00:46     Проинициализировать класс массивов который имеет конструктор по умолчанию #17
Хм... Помнится, у вас компилятор и warning'ов не допускает. У меня только предупреждения об инициализации неиспользуемых переменных (как и в первом случае, такой код у вас не работал) и преобразовании const char* в char.
Второй тип предупреждений убрал кодом:
C++
1
2
char name[]="Паша", fam[]="Петрович", pol[]="Мальчик", sost[]="Свободен";
Person per1[55] = Person(name,fam,pol,sost,15);
Первый тип предупреждений - нужно использовать инициализированные переменные (или удалить их).
Вот такие предупреждения (внизу):
Миниатюры
Проинициализировать класс массивов который имеет конструктор по умолчанию  
xADMIRALx
67 / 61 / 1
Регистрация: 09.06.2012
Сообщений: 291
08.07.2012, 01:00  [ТС]     Проинициализировать класс массивов который имеет конструктор по умолчанию #18
Оке,будим пробывать
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.07.2012, 10:27     Проинициализировать класс массивов который имеет конструктор по умолчанию #19
Цитата Сообщение от xADMIRALx Посмотреть сообщение
/вот тут та и ошибка;Как можно проинициализировать его ?
Так:
код
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
#include <iostream>
using namespace std;
 
class a
{
int q,w,e;
 
public:
a(int b)
{
  q = w = e = b;
}
 
a(){}
 
void show()
{
  cout << q << "  " << w << "  " << e << endl;
}
};
 
const int N = 15; 
 
int main()
{
   a seliimasiv[N];
   for (int i = 0; i < N; i++)
   {
        seliimasiv[i] = a(4);
   }
   for (int i = 0; i < N; i++)
   {
        seliimasiv[i].show();
   }
 
system("pause");
return 0;
}
Добавлено через 15 минут
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
#include <iostream>
using namespace std;
 
class a
{
public:
    char s[120];
    int q;
a(int i, char *p)
{
    memset(s,'\0',120);
    q = i;
    for (int a = 0; *p; a++, p++)
    s[a] = *p;
}
a() {}
};
 
int main()
{
 a f[22];
 for (int i = 0; i < 22; i++)
 {
    f[i] = a(2,"3f3f");
 }
 
 cout << f[3].s << endl;
 
 system("pause");
 return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.07.2012, 13:12     Проинициализировать класс массивов который имеет конструктор по умолчанию
Еще ссылки по теме:

Конструктор по умолчанию - C++
У меня получается создавать конструктор по умолчанию если в хедере эти значения указаны: class Unit { protected: string name; ...

Конструктор по умолчанию - C++
Всем привет! Если в классе вообще нет конструктора, чем будут инициализироваться члены класса? И в чем отличие объект() и объект...

Конструктор по умолчанию - C++
Здравствуйте, есть такой код: explicit RFileDownloader(QObject *parent = 0); explicit RFileDownloader(const QUrl &amp;url = QUrl(),...

Конструктор по умолчанию - C++
как использовать конструктор по умолчанию в конструкторе с параметром? К по умолчанию заполняет массив заранее определёнными символами, а...

Конструктор по умолчанию - C++
Показывает ошибку : 1 IntelliSense: для класса &quot;tovar&quot; не существует конструктор по умолчанию Подскажите пожалуйста как сделать ...


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

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6419 / 3058 / 302
Регистрация: 04.12.2011
Сообщений: 8,330
Записей в блоге: 3
08.07.2012, 13:12     Проинициализировать класс массивов который имеет конструктор по умолчанию #20
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class a
{
int q,w,e;
 
public:
a(int b);
 
a(){};
 
void show();
{
  cout << q << "  " << w << "  " << e << endl;
}
};
a::a():q(0),w(0),e(0){}
a::a(int c):q(c),w(c),e(c){}
void show(/*void*/)
{
  cout << q << "  " << w << "  " << e << endl;
}
Yandex
Объявления
08.07.2012, 13:12     Проинициализировать класс массивов который имеет конструктор по умолчанию
Ответ Создать тему
Опции темы

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