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

Начало ООП

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

Студворк — интернет-сервис помощи студентам
Привет всем! У меня началось изучение ООП и соответственно пошли классы. Первое задание - постpоить класс для pаботы с массивом. Класс должен включать соответствующие поля: максимальный размер массива, индекс текущего элемента, указатель на массив. Я так понимаю что полями будут переменные которые я объявляю в private? А что мы делаем в public? Объявляем функции которые потом буду работать с переменными из private? Или все операции будут производиться в теле класса? Или эти функции и будут в теле класса, а не за его пределами?
Прошу помочь разобраться! Буду очень благодарен за помощь!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.02.2013, 14:10
Ответы с готовыми решениями:

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

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

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

38
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
17.02.2013, 14:17
> Я так понимаю что полями будут переменные которые я объявляю в private?
Да.

> А что мы делаем в public? Объявляем функции которые потом буду работать с переменными из private?
Да.

> Или эти функции и будут в теле класса, а не за его пределами?
Да.
1
7 / 7 / 1
Регистрация: 18.10.2012
Сообщений: 93
17.02.2013, 14:19  [ТС]
Спасибо! А для чего нужен раздел protected?
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
17.02.2013, 14:22
Цитата Сообщение от AzgardC Посмотреть сообщение
Спасибо! А для чего нужен раздел protected?
для наследников
снаружи члены запрещены а для наследников разрешены
1
7 / 7 / 1
Регистрация: 18.10.2012
Сообщений: 93
17.02.2013, 14:29  [ТС]
Ясно, т.е. protected мне здесь не понадобится , т.к. мне хватит только класса и его функций из паблика?

Добавлено через 3 минуты
И еще) А зачем нужен конструктор, разве я не могу инициализировать переменные из private прямо в функциях?
0
 Аватар для Schizorb
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
17.02.2013, 14:33
Цитата Сообщение от AzgardC Посмотреть сообщение
Ясно, т.е. protected мне здесь не понадобится , т.к. мне хватит только класса и его функций из паблика?
Если нет наследования, то нет смысла и в protected.
Цитата Сообщение от AzgardC Посмотреть сообщение
И еще) А зачем нужен конструктор, разве я не могу инициализировать переменные из private прямо в функциях?
И каждый раз после создания объекта вручную вызывать эти функции? А если забудем - в переменных будет лежать мусор? Удобнее же создать конструктор, который будет инициализировать элементы объекта сразу при его создании.
0
7 / 7 / 1
Регистрация: 18.10.2012
Сообщений: 93
17.02.2013, 14:41  [ТС]
Конструктор это же по сути функция? Есть какие-то особенности его написания. Если есть, то можно пожалуйста пример с комментами.
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
17.02.2013, 14:47
Цитата Сообщение от AzgardC Посмотреть сообщение
Конструктор это же по сути функция? Есть какие-то особенности его написания.
самая главная особенность конструктор ничего не возвращает, даже void
вторая особенность конструктор всегда существует, даже если ты его не создашь создастся сам(неявный конструктор)
Который ничего не делает в простом классе, но если существует хоть одна виртуальная функция то конструктор создаст таблицу виртуальных функций
1
 Аватар для Schizorb
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
17.02.2013, 14:47
AzgardC, имеет имя, совпадающее с именем класса, не имеет возвращаемого типа, может иметь список инициализации. Могут быть перегруженные версии конструкторов с разным количеством и типами параметров.

C++
1
2
3
4
5
6
7
8
class Test
{
public:
    Test() {data = 0;} // конструктор по умолчанию
    Test(int d) {data = d;} // конструктор с 1 параметром
private:
    int data; // элемент данных
};
Оно же, но со списком инициализации:
C++
1
2
3
4
5
6
7
8
class Test
{
public:
    Test() : data(0) {} // конструктор по умолчанию
    Test(int d) : data (d) {} // конструктор с 1 параметром
private:
    int data; // элемент данных
};
1
7 / 7 / 1
Регистрация: 18.10.2012
Сообщений: 93
17.02.2013, 14:58  [ТС]
Спасибо большое! И тот же вопрос по деструктору. И где он пишется вообще?

Добавлено через 4 минуты
И всегда ли нужен деструктор?
0
 Аватар для Schizorb
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
17.02.2013, 15:01
AzgardC, если используешь динамическое выделение памяти, то нужен, чтобы ее освобождать (как, собственно, и конструктор копирования и оператор присваивания).
1
7 / 7 / 1
Регистрация: 18.10.2012
Сообщений: 93
17.02.2013, 15:06  [ТС]
Спасибо) А что из себя представляет конструктор копирования и для чего он нужен?(извините за нубство)))
0
Эксперт С++
 Аватар для ITcrusader
179 / 165 / 21
Регистрация: 12.02.2013
Сообщений: 410
17.02.2013, 15:52
Нужен, если при создании объекта класса или в процессе его работы происходит захват каких-либо ресурсов, которые хорошая практика программирования на с++ требует освобождать.

Добавлено через 33 секунды
ах) опаздал про деструктор написать)
0
7 / 7 / 1
Регистрация: 18.10.2012
Сообщений: 93
17.02.2013, 16:56  [ТС]
ITcrusader, Все равно спасибо))

Добавлено через 51 минуту
Так. Народ, можете поругать меня за мой мой маленький код?))
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
#include <iostream>
#include <math.h>
#include <conio.h>
#include <time.h>
 
 
class massiv
{
private:
    int i,max,mas[100];// индекс лемента, макс. размер массива, массив
//  int *pmassi;// указатель на массив
public:
    massiv();// конструктор
    ~massiv();// деструктор
void neo(); // генерация массива
/*      void in(); //ф-я добавления нового элемента
    int search(); //ф-я поиска элемента
    int zam(); // ф-я замены элемента
    int del(); // ф-я удаления элемента
    void show(); //вывод массива
    */
    void massiv::neo()
    {
        time_t t;
        int j;
         cout << "Введите максимальный размер массива"<<endl;
         cin >> max;
         srand((unsigned)time(&t));
         for (j = 0; j < max; ++j) mas[j]=rand() %10 + 1;
         for (j = 0; j < max; ++j) {printf("\t%8.4f\n", mas[j]);}
 
    }}
Укажите мне на то, что я понял не так))) Буду благодарен за помощь! Очень!))
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
17.02.2013, 17:01
3: Плохо с переносимостью, лучше не использовать древний conio родом из MS-DOS.
7: array
10: Лучше по-отдельности определять поля, вдруг надо будет тип менять.
13-14: А где реализации?
22: Если реализация внутри класса, то не надо писать квалификатор с двойным двоеточием.
22-32: Внимательно подумайте, кто должен заполнять массив данными: он сам себя или это всё же кто-то внешний даёт ему данные?
32: Точка с запятой после закрывающей скобки определения класса.
33: Где main()?
1
7 / 7 / 1
Регистрация: 18.10.2012
Сообщений: 93
17.02.2013, 17:18  [ТС]
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
#include <conio.h>
#include <iostream>
#include <math.h>
#include <time.h>
 
 
class massiv
{
private:
    int i,max,mas[100];// индекс лемента, макс. размер массива, массив
//  int *pmassi;// указатель на массив
public:
    massiv();// конструктор
    ~massiv();// деструктор
void neo(); // генерация массива
/*      void in(); //ф-я добавления нового элемента
    int search(); //ф-я поиска элемента
    int zam(); // ф-я замены элемента
    int del(); // ф-я удаления элемента
    void show(); //вывод массива
    */
}
massiv::massiv()
{
    time_t t;
    max=10; i=0;
srand((unsigned)time(&t));
         for (j = 0; j < max; ++j) mas[j]=rand() %10 + 1;
}
massiv::~massiv()
{ 
    for ( int i = 0; i < max; ++i) 
        delete[] mas[i]; 
    delete[] mas;
}
 
         void massiv::neo()
    {
        time_t t;
        int j;
         cout << "Введите максимальный размер массива"<<endl;
         cin >> max;
         srand((unsigned)time(&t));
         for (j = 0; j < max; ++j) mas[j]=rand() %10 + 1;
         for (j = 0; j < max; ++j) {printf("\t%8.4f\n", mas[j]);}
 
    }
Добавлено через 32 секунды
Раунд 2))
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
17.02.2013, 17:21
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
7: array

Не по теме:

Россия не Америка и не Англия. Пиндосы вообще тупые.


строка 32 точки с запятой не хватает.
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Внимательно подумайте, кто должен заполнять массив данными: он сам себя или это всё же кто-то внешний даёт ему данные?
Вот с этим нельзя не согласиться. Почему-то часто вижу многих, которые, ещё с первых упражнений с классами начиная, продолжают и далее делать ввод-вывод методом класса.
ИМХО если есть геттер для элементов массива, то пользователь класса сам сможет их в цикле брать по-очереди и выводить (может совсем и не в консоль ему надо).

Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Где main()?
Я уже привык, что многие примеры показываются в виде отдельных классов/функций без "главной функции". Большее недоумение вызывает, когда в ответ на приведённый код функции следует: "Эй, А у меня ошибка unresolved external symbol _main"
1
7 / 7 / 1
Регистрация: 18.10.2012
Сообщений: 93
18.02.2013, 14:59  [ТС]
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
22-32: Внимательно подумайте, кто должен заполнять массив данными: он сам себя или это всё же кто-то внешний даёт ему данные?
Просто я думал так: сначала автоматически будет создан массив, а затем пользователь будет его изменять как хочет. Пусть хоть все элементы заменит)))

Добавлено через 2 минуты
А main я еще сделаю)

Добавлено через 3 минуты
Ох! Извините! У меня потушили свет, и батарея на ноуте почти сдохла, так что добью эту тему завтра! Всем большое спасибо!

Добавлено через 21 час 18 минут
Продолжаю тему)
Достаточно ли моего конструктора или обязательно должен еще быть конструктор с параметрами?
0
Эксперт С++
 Аватар для ITcrusader
179 / 165 / 21
Регистрация: 12.02.2013
Сообщений: 410
18.02.2013, 15:03
Цитата Сообщение от AzgardC Посмотреть сообщение
Достаточно ли моего конструктора или обязательно должен еще быть конструктор с параметрами?
Обязателен лишь конструктор по умолчанию (без параметров, либо с параметрами со значениями по умолчанию). Потому он и создается компилятором, если ты его не создашь. Что касается других конструкторов, тут ты волен решать, нужны ли они для конкретного твоего класса.

Например, для массива целесообразно задавать конструктор с параметром, например, размером массива...и т.д.
1
7 / 7 / 1
Регистрация: 18.10.2012
Сообщений: 93
18.02.2013, 15:05  [ТС]
ITcrusader, Все понял! Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.02.2013, 15:05
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru