Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
7 / 7 / 1
Регистрация: 18.10.2012
Сообщений: 93
1

Начало ООП

17.02.2013, 14:10. Показов 2494. Ответов 38
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет всем! У меня началось изучение ООП и соответственно пошли классы. Первое задание - постpоить класс для pаботы с массивом. Класс должен включать соответствующие поля: максимальный размер массива, индекс текущего элемента, указатель на массив. Я так понимаю что полями будут переменные которые я объявляю в private? А что мы делаем в public? Объявляем функции которые потом буду работать с переменными из private? Или все операции будут производиться в теле класса? Или эти функции и будут в теле класса, а не за его пределами?
Прошу помочь разобраться! Буду очень благодарен за помощь!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.02.2013, 14:10
Ответы с готовыми решениями:

Начало ООП. Классы
Здравствуйте.Читал про ссылки массивов на указатели, и указателей на массивы.Не могу понять как в...

Данный массив A (n). Все положительные его элементы поместить в начало массива B (n), а все отрицательные - в начало массива C (n). Подсчитать количес
Данный массив A (n). Все положительные его элементы поместить в начало массива B (n), а все...

Все положительные элементы поместить в начало массива В(n), а отрицательные элементы — в начало массива С(n)
Ребята. Помогите с задачей пожалуйста. Дан массив А(n). Все положительные его элементы поместить...

Начало разработки ООП библиотеки
Приветствую всех. Существует не далеко всем известная система IBM i (бывшее название OS400),...

38
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
22.02.2013, 10:58 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от AzgardC Посмотреть сообщение
Просто я думал так: сначала автоматически будет создан массив, а затем пользователь будет его изменять как хочет. Пусть хоть все элементы заменит)))
Давайте проведём такую аналогию. Есть автомобиль. У него есть бензобак. Как по-вашему, в автомобиле должна быть маленькая заправка, вырабатывающая бензин и подающая его в бензобак, или же кто-то должен заливать бензин извне через интерфейс автомобиля? В вашем коде "автомобиль" сам делает "бензин" для себя. А если пользователь не захочет вводить элементы массива вручную, а считать их из файла или вообще сгенерировать как-то в программе и записать в массив? На каждую новую задачу будете дописывать по методу в класс? Не дело это.
1
7 / 7 / 1
Регистрация: 18.10.2012
Сообщений: 93
22.02.2013, 12:43  [ТС] 22
silent_1991, Да, думаю вы правы. Пойду этим путем! Спасибо!
0
0 / 0 / 0
Регистрация: 13.11.2012
Сообщений: 14
22.02.2013, 16:03 23
Прочтите Шилдта. Отлично все объясняет о ООП.
0
7 / 7 / 1
Регистрация: 18.10.2012
Сообщений: 93
28.02.2013, 19:13  [ТС] 24
Я вернулся с вопросами))
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
#include <conio.h>
#include <iostream>
#include <math.h>
#include <time.h>
#define W 100
using namespace std;
 
class massiv
{
private:
    int i,max,mas[W];
 
public:
    massiv();
    void neo(int m[W], int Max); 
    void printmassiv(); 
    
 
massiv::massiv()
{
    max=0; 
    i=0;
}
 
 
void massiv::neo(int m[W], int Max)
{
    max=Max;
    for (i = 0; i<max; ++i) mas[i]=m[i];
}
 
void massiv::printmassiv()
{
         for (i = 0; i < max; ++i) printf("\t%8.4f\n",mas[i]);
}
 
int main()
{
    int Max, m[W];
    massiv M;
    int j;
    cout << "Vvedite razmer massiva: ";
    cin >> Max;
    cout << "Vvodite elementi massiva nazhimaya Enter: \n";
    for (j = 0; j<Max; ++j) cin >>m[j];
    M.neo(m,  Max);
    cout << "Vot ON!\n";
    M.printmassiv();
    printf("\n Press any key: ");
     _getch();
 
}
Не ругайтесь что массив не динамический, позже сделаю. Можете сделать замечания по коду?
0
Эксперт С++
177 / 163 / 21
Регистрация: 12.02.2013
Сообщений: 410
28.02.2013, 19:27 25
Есть замечания))) Ща напишу...А ты запускал это?)))
0
7 / 7 / 1
Регистрация: 18.10.2012
Сообщений: 93
28.02.2013, 19:30  [ТС] 26
ITcrusader, Да, спасибо что напомнили, забыл его сделать))) А по коду можете подсказать чего?
0
Эксперт С++
177 / 163 / 21
Регистрация: 12.02.2013
Сообщений: 410
28.02.2013, 19:36 27
Могу, просто не знаю с чего начать)

1. Он не компилируется. Ты компилировал его перед тем, как сюда кинуть?
0
7 / 7 / 1
Регистрация: 18.10.2012
Сообщений: 93
28.02.2013, 19:42  [ТС] 28
он компилируется, вот только вместо массива выводит нули

Добавлено через 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
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
#include <conio.h>
#include <iostream>
#include <math.h>
#include <time.h>
#define W 100
using namespace std;
 
class massiv
{
private:
    int i,max,mas[W];
 
public:
    massiv();
    void neo(int m[W], int Max); 
    void printmassiv(); 
    
};
massiv::massiv()
{
    max=0; 
    i=0;
}
 
 
void massiv::neo(int m[W], int Max)
{
    max=Max;
    for (i = 0; i<max; ++i) mas[i]=m[i];
}
 
void massiv::printmassiv()
{
         for (i = 0; i < max; ++i) printf("\t%8.4f\n",mas[i]);
}
 
int main()
{
    int Max, m[W];
    massiv M;
    int j;
    cout << "Vvedite razmer massiva: ";
    cin >> Max;
    cout << "Vvodite elementi massiva nazhimaya Enter: \n";
    for (j = 0; j<Max; ++j) cin >>m[j];
    M.neo(m,  Max);
    cout << "Vot ON!\n";
    M.printmassiv();
    printf("\n Press any key: ");
     _getch();
 
}
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,520
28.02.2013, 19:43 29
Цитата Сообщение от AzgardC Посмотреть сообщение
int i,
зачем ты его делаешь членом класса?
хватит и локального объявление в методах

Цитата Сообщение от AzgardC Посмотреть сообщение
void massiv::neo(int m[W], int Max)
попробуй
C++
1
void massiv::neo(int * m, int Max)
0
7 / 7 / 1
Регистрация: 18.10.2012
Сообщений: 93
28.02.2013, 19:44  [ТС] 30
Цитата Сообщение от ValeryS Посмотреть сообщение
зачем ты его делаешь членом класса?
просто в будущем я добавлю еще кое-какие методы
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,520
28.02.2013, 19:46 31
Цитата Сообщение от AzgardC Посмотреть сообщение
просто в будущем я добавлю еще кое-какие методы
и что?
i это счетчик цикла
он нужен только в цикле
0
Эксперт С++
177 / 163 / 21
Регистрация: 12.02.2013
Сообщений: 410
28.02.2013, 19:48 32
C++
1
#define W 100
забудь такую конструкцию. к тому же, почему класс связан с внешним литералом??? Используй член класса для задания размерности.
1
7 / 7 / 1
Регистрация: 18.10.2012
Сообщений: 93
28.02.2013, 19:52  [ТС] 33
Цитата Сообщение от ValeryS Посмотреть сообщение
и что?
i это счетчик цикла
он нужен только в цикле
я просто подумал что пока новые методы не добавил, поиспользую его как итератор))
Цитата Сообщение от ITcrusader Посмотреть сообщение
забудь такую конструкцию. к тому же, почему класс связан с внешним литералом??? Используй член класса для задания размерности.
Хорошо, исправлю, спасибо!
0
Эксперт С++
177 / 163 / 21
Регистрация: 12.02.2013
Сообщений: 410
28.02.2013, 19:53 34
в конструкторе лучше юзать список инициализации
C++
1
massiv::massiv(): max(0), i(0) {}
1
7 / 7 / 1
Регистрация: 18.10.2012
Сообщений: 93
28.02.2013, 19:59  [ТС] 35
Цитата Сообщение от ITcrusader Посмотреть сообщение
в конструкторе лучше юзать список инициализации
а почему список иниц-ии лучше?

Добавлено через 2 минуты
И не знаете почему у меня вместо членов массива выводит 0.000 вместо каждого?
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,520
28.02.2013, 20:01 36
Цитата Сообщение от AzgardC Посмотреть сообщение
printf("\t%8.4f\n",mas[i]
ты выводишь числа в плавающем типе
хотя массив у тебя целочисленный
Цитата Сообщение от AzgardC Посмотреть сообщение
int i,max,mas[W];
1
7 / 7 / 1
Регистрация: 18.10.2012
Сообщений: 93
28.02.2013, 20:09  [ТС] 37
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
#include <conio.h>
#include <iostream>
#include <math.h>
#include <time.h>
#define W 100
using namespace std;
 
class massiv
{
private:
    int i,max,mas[W];
 
public:
    massiv();
    void neo(int m[W], int Max); 
    void printmassiv(); 
    
};
massiv::massiv(): max(0), i(0) {}
 
 
void massiv::neo(int m[W], int Max)
{
    max=Max;
    for (i = 0; i<max; ++i) mas[i]=m[i];
}
 
void massiv::printmassiv()
{
    for (int i=0; i<max; i++)cout<<mas[i]<<"\n";
 
}
 
int main()
{
    int Max, m[W];
    massiv M;
    int j;
    cout << "Vvedite razmer massiva: ";
    cin >> Max;
    cout << "Vvodite elementi massiva nazhimaya Enter: \n";
    for (j = 0; j<Max; ++j) cin >>m[j];
    M.neo(m,  Max);
    cout << "Vot ON!\n";
    M.printmassiv();
    printf("\n Press any key: ");
     _getch();
 
}
Вот итог!)
0
Эксперт С++
177 / 163 / 21
Регистрация: 12.02.2013
Сообщений: 410
28.02.2013, 20:14 38
Цитата Сообщение от AzgardC Посмотреть сообщение
а почему список иниц-ии лучше?
Потому что с ним объект создается и инициализируется, т.е. вызов одного конструктора внутреннего объекта. Если же объект будешь в теле конструктора инициализировать чем-то - то это уже вызов оператора присваивания после того, как объект уже сконструирован конструктором по умолчанию. Короче, 1 функциональный вызов против двух. Это не единственное различие. Ну о дополнительных - подскажет компилятор, когда натолкнешься)
1
7 / 7 / 1
Регистрация: 18.10.2012
Сообщений: 93
28.02.2013, 21:55  [ТС] 39
ITcrusader, Понятно, буду знать. Спасибо

Добавлено через 1 час 39 минут
Закончил)))
Последняя просьба - посмотрите результат. Есть ли замечания?
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include <conio.h>
#include <iostream>
#include <math.h>
#include <time.h>
#define W 100
using namespace std;
 
class massiv
{
private:
    int p,max,mas[W];
 
public:
    massiv();
    ~massiv();
    void neo(int m[W], int Max); 
    void printmassiv(); 
    void dob(int );
    void search(int );
    void swap(int , int );
    void del(int );
    
};
massiv::massiv(): max(0),p(0) {}
 
massiv::~massiv() 
{  
    delete[] mas;
}
 
 
 
void massiv::neo(int *m, int Max)
{
    int i;
    max=Max;
    for (i = 0; i<max; ++i) mas[i]=m[i];
}
 
void massiv::printmassiv()
{
    int i;
    for (int i=0; i<max; i++)cout<<mas[i]<<"\n";
}
 
void massiv::dob(int f)
{
    int i;
    mas[max]=f;
    max=max+1;
}
 
void massiv::search(int k)
{
    int i;
    for (int i=0; i<max; i++)if(mas[i]==k)
    {
        cout<<"Nomer elementa: "<<i+1<<"\n"; 
        break;
    };
}
 
void massiv::swap(int y, int u)
{
    mas[y-1]=u;
}
 
void massiv::del(int t)
{
    int i;
    for (int i=t-1; i<max-1; i++)mas[i]=mas[i+1];
    max=max-1;
}
 
int main()
{
    int Max, m[W], f, k, y, u, t;
    massiv M;
    int j;
    cout << "Vvedite razmer massiva: ";
    cin >> Max;
    cout << "Vvodite elementi massiva nazhimaya Enter: \n";
    for (j = 0; j<Max; ++j) cin >>m[j];
    M.neo(m,  Max);
    cout << "Vot ON!\n";
    M.printmassiv();
    cout << "\n";
    cout << "Vvedite celoe chislo kotoroe hotite dobavit': \n";
    cin >> f;
    M.dob(f);
    cout << "Vot ON!: \n";
    M.printmassiv();
    cout << "\n";
    cout << "Vvedite iskomoe chislo: \n";
    cin >> k;
    M.search(k);
    cout << "\n";
    cout << "Vvedite nomer elementa kotoriy hotite zamenit': \n";
    cin >> y;
    cout << "Vvedite noviy element: \n";
    cin >> u;
    M.swap(y, u);
    cout << "Vot ON!: \n";
    M.printmassiv();
    cout << "\n";
    cout << "Vvedite nomer elementa kotoriy hotite udalit': \n";
    cin >> t;
    M.del(t);
    cout << "Vot ON!: \n";
    M.printmassiv();
    cout << "\n";
    printf("\n Press any key: ");
    _getch();
}
0
28.02.2013, 21:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.02.2013, 21:55
Помогаю со студенческими работами здесь

ООП мое первое начало
Всем привет! Пожалуйста помогите разобраться с ООП. Решил к этому подойти вплотную, и теперь куча...

Начало ооп, странное задание и глупенький ученик
Вообщем дали мне задачу, а я жутко туплю и нормально нечего не получается, задача плёвая:З Есть...

Изучаю Python, сейчас учу основы ООП, где можно найти задачи по ООП
Скиньте пожалуйста источники с задачами(желательно на русском)

Выписать в массив A с начало положительные числа X, а в начало второго массива B отрицательные числа X.
Из одномерного массива X(8) получить два других массива A(8) и B(8). Выписать в массив A с начало...


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

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