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

Начало ООП - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
AzgardC
7 / 7 / 0
Регистрация: 18.10.2012
Сообщений: 81
17.02.2013, 14:10     Начало ООП #1
Привет всем! У меня началось изучение ООП и соответственно пошли классы. Первое задание - постpоить класс для pаботы с массивом. Класс должен включать соответствующие поля: максимальный размер массива, индекс текущего элемента, указатель на массив. Я так понимаю что полями будут переменные которые я объявляю в private? А что мы делаем в public? Объявляем функции которые потом буду работать с переменными из private? Или все операции будут производиться в теле класса? Или эти функции и будут в теле класса, а не за его пределами?
Прошу помочь разобраться! Буду очень благодарен за помощь!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2013, 14:10     Начало ООП
Посмотрите здесь:

C++ ООП
C++ ООП
ООП C++
ООП C++
C++ Начало ООП. Классы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
22.02.2013, 10:58     Начало ООП #21
Цитата Сообщение от AzgardC Посмотреть сообщение
Просто я думал так: сначала автоматически будет создан массив, а затем пользователь будет его изменять как хочет. Пусть хоть все элементы заменит)))
Давайте проведём такую аналогию. Есть автомобиль. У него есть бензобак. Как по-вашему, в автомобиле должна быть маленькая заправка, вырабатывающая бензин и подающая его в бензобак, или же кто-то должен заливать бензин извне через интерфейс автомобиля? В вашем коде "автомобиль" сам делает "бензин" для себя. А если пользователь не захочет вводить элементы массива вручную, а считать их из файла или вообще сгенерировать как-то в программе и записать в массив? На каждую новую задачу будете дописывать по методу в класс? Не дело это.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AzgardC
7 / 7 / 0
Регистрация: 18.10.2012
Сообщений: 81
22.02.2013, 12:43  [ТС]     Начало ООП #22
silent_1991, Да, думаю вы правы. Пойду этим путем! Спасибо!
Voron55555
0 / 0 / 0
Регистрация: 13.11.2012
Сообщений: 14
22.02.2013, 16:03     Начало ООП #23
Прочтите Шилдта. Отлично все объясняет о ООП.
AzgardC
7 / 7 / 0
Регистрация: 18.10.2012
Сообщений: 81
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();
 
}
Не ругайтесь что массив не динамический, позже сделаю. Можете сделать замечания по коду?
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
28.02.2013, 19:27     Начало ООП #25
Есть замечания))) Ща напишу...А ты запускал это?)))
AzgardC
7 / 7 / 0
Регистрация: 18.10.2012
Сообщений: 81
28.02.2013, 19:30  [ТС]     Начало ООП #26
ITcrusader, Да, спасибо что напомнили, забыл его сделать))) А по коду можете подсказать чего?
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
28.02.2013, 19:36     Начало ООП #27
Могу, просто не знаю с чего начать)

1. Он не компилируется. Ты компилировал его перед тем, как сюда кинуть?
AzgardC
7 / 7 / 0
Регистрация: 18.10.2012
Сообщений: 81
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();
 
}
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,043
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)
AzgardC
7 / 7 / 0
Регистрация: 18.10.2012
Сообщений: 81
28.02.2013, 19:44  [ТС]     Начало ООП #30
Цитата Сообщение от ValeryS Посмотреть сообщение
зачем ты его делаешь членом класса?
просто в будущем я добавлю еще кое-какие методы
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,043
28.02.2013, 19:46     Начало ООП #31
Цитата Сообщение от AzgardC Посмотреть сообщение
просто в будущем я добавлю еще кое-какие методы
и что?
i это счетчик цикла
он нужен только в цикле
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
28.02.2013, 19:48     Начало ООП #32
C++
1
#define W 100
забудь такую конструкцию. к тому же, почему класс связан с внешним литералом??? Используй член класса для задания размерности.
AzgardC
7 / 7 / 0
Регистрация: 18.10.2012
Сообщений: 81
28.02.2013, 19:52  [ТС]     Начало ООП #33
Цитата Сообщение от ValeryS Посмотреть сообщение
и что?
i это счетчик цикла
он нужен только в цикле
я просто подумал что пока новые методы не добавил, поиспользую его как итератор))
Цитата Сообщение от ITcrusader Посмотреть сообщение
забудь такую конструкцию. к тому же, почему класс связан с внешним литералом??? Используй член класса для задания размерности.
Хорошо, исправлю, спасибо!
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
28.02.2013, 19:53     Начало ООП #34
в конструкторе лучше юзать список инициализации
C++
1
massiv::massiv(): max(0), i(0) {}
AzgardC
7 / 7 / 0
Регистрация: 18.10.2012
Сообщений: 81
28.02.2013, 19:59  [ТС]     Начало ООП #35
Цитата Сообщение от ITcrusader Посмотреть сообщение
в конструкторе лучше юзать список инициализации
а почему список иниц-ии лучше?

Добавлено через 2 минуты
И не знаете почему у меня вместо членов массива выводит 0.000 вместо каждого?
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,043
28.02.2013, 20:01     Начало ООП #36
Цитата Сообщение от AzgardC Посмотреть сообщение
printf("\t%8.4f\n",mas[i]
ты выводишь числа в плавающем типе
хотя массив у тебя целочисленный
Цитата Сообщение от AzgardC Посмотреть сообщение
int i,max,mas[W];
AzgardC
7 / 7 / 0
Регистрация: 18.10.2012
Сообщений: 81
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();
 
}
Вот итог!)
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
28.02.2013, 20:14     Начало ООП #38
Цитата Сообщение от AzgardC Посмотреть сообщение
а почему список иниц-ии лучше?
Потому что с ним объект создается и инициализируется, т.е. вызов одного конструктора внутреннего объекта. Если же объект будешь в теле конструктора инициализировать чем-то - то это уже вызов оператора присваивания после того, как объект уже сконструирован конструктором по умолчанию. Короче, 1 функциональный вызов против двух. Это не единственное различие. Ну о дополнительных - подскажет компилятор, когда натолкнешься)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.02.2013, 21:55     Начало ООП
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
AzgardC
7 / 7 / 0
Регистрация: 18.10.2012
Сообщений: 81
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();
}
Yandex
Объявления
28.02.2013, 21:55     Начало ООП
Ответ Создать тему
Опции темы

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