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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
AzgardC
7 / 7 / 0
Регистрация: 18.10.2012
Сообщений: 81
#1

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

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

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

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

ООП - C++
#pragma hdrstop #pragma argsused //#include "Student.hpp" //#include "Prof.hpp" //#include "Personne.hpp" #include <conio.h> ...

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

Начало - C++
Подскажите программу для программирования на c/c++ и все прилагающиеся к ней инструменты(компиляторы и т.д.) и что лучше c или c++?...

Начало - C++
Здравствуйте я начинающий IT работник и мне нужна помощь тех кто давно в этой сфере я просто не знаю к кому мне обратиться с этими...

Начало Си++ - C++
Я понимаю что данные задачи очень просты, но помогите пожалуйста...Я просто совсем нечего не шарю.. Задача 1 Дан массив X из N целых...

ООП ВОПРОС - C++
Плиз обьясните почему нельзя сделать так (ошибка): #include<iostream> using namespace std; class one { public: int a; } ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
17.02.2013, 14:17     Начало ООП #2
> Я так понимаю что полями будут переменные которые я объявляю в private?
Да.

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

> Или эти функции и будут в теле класса, а не за его пределами?
Да.
AzgardC
7 / 7 / 0
Регистрация: 18.10.2012
Сообщений: 81
17.02.2013, 14:19  [ТС]     Начало ООП #3
Спасибо! А для чего нужен раздел protected?
ValeryS
Модератор
6537 / 5003 / 460
Регистрация: 14.02.2011
Сообщений: 16,639
17.02.2013, 14:22     Начало ООП #4
Цитата Сообщение от AzgardC Посмотреть сообщение
Спасибо! А для чего нужен раздел protected?
для наследников
снаружи члены запрещены а для наследников разрешены
AzgardC
7 / 7 / 0
Регистрация: 18.10.2012
Сообщений: 81
17.02.2013, 14:29  [ТС]     Начало ООП #5
Ясно, т.е. protected мне здесь не понадобится , т.к. мне хватит только класса и его функций из паблика?

Добавлено через 3 минуты
И еще) А зачем нужен конструктор, разве я не могу инициализировать переменные из private прямо в функциях?
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
17.02.2013, 14:33     Начало ООП #6
Цитата Сообщение от AzgardC Посмотреть сообщение
Ясно, т.е. protected мне здесь не понадобится , т.к. мне хватит только класса и его функций из паблика?
Если нет наследования, то нет смысла и в protected.
Цитата Сообщение от AzgardC Посмотреть сообщение
И еще) А зачем нужен конструктор, разве я не могу инициализировать переменные из private прямо в функциях?
И каждый раз после создания объекта вручную вызывать эти функции? А если забудем - в переменных будет лежать мусор? Удобнее же создать конструктор, который будет инициализировать элементы объекта сразу при его создании.
AzgardC
7 / 7 / 0
Регистрация: 18.10.2012
Сообщений: 81
17.02.2013, 14:41  [ТС]     Начало ООП #7
Конструктор это же по сути функция? Есть какие-то особенности его написания. Если есть, то можно пожалуйста пример с комментами.
ValeryS
Модератор
6537 / 5003 / 460
Регистрация: 14.02.2011
Сообщений: 16,639
17.02.2013, 14:47     Начало ООП #8
Цитата Сообщение от AzgardC Посмотреть сообщение
Конструктор это же по сути функция? Есть какие-то особенности его написания.
самая главная особенность конструктор ничего не возвращает, даже void
вторая особенность конструктор всегда существует, даже если ты его не создашь создастся сам(неявный конструктор)
Который ничего не делает в простом классе, но если существует хоть одна виртуальная функция то конструктор создаст таблицу виртуальных функций
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
17.02.2013, 14:47     Начало ООП #9
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; // элемент данных
};
AzgardC
7 / 7 / 0
Регистрация: 18.10.2012
Сообщений: 81
17.02.2013, 14:58  [ТС]     Начало ООП #10
Спасибо большое! И тот же вопрос по деструктору. И где он пишется вообще?

Добавлено через 4 минуты
И всегда ли нужен деструктор?
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
17.02.2013, 15:01     Начало ООП #11
AzgardC, если используешь динамическое выделение памяти, то нужен, чтобы ее освобождать (как, собственно, и конструктор копирования и оператор присваивания).
AzgardC
7 / 7 / 0
Регистрация: 18.10.2012
Сообщений: 81
17.02.2013, 15:06  [ТС]     Начало ООП #12
Спасибо) А что из себя представляет конструктор копирования и для чего он нужен?(извините за нубство)))
ITcrusader
Эксперт C++
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
17.02.2013, 15:52     Начало ООП #13
Нужен, если при создании объекта класса или в процессе его работы происходит захват каких-либо ресурсов, которые хорошая практика программирования на с++ требует освобождать.

Добавлено через 33 секунды
ах) опаздал про деструктор написать)
AzgardC
7 / 7 / 0
Регистрация: 18.10.2012
Сообщений: 81
17.02.2013, 16:56  [ТС]     Начало ООП #14
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]);}
 
    }}
Укажите мне на то, что я понял не так))) Буду благодарен за помощь! Очень!))
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
17.02.2013, 17:01     Начало ООП #15
3: Плохо с переносимостью, лучше не использовать древний conio родом из MS-DOS.
7: array
10: Лучше по-отдельности определять поля, вдруг надо будет тип менять.
13-14: А где реализации?
22: Если реализация внутри класса, то не надо писать квалификатор с двойным двоеточием.
22-32: Внимательно подумайте, кто должен заполнять массив данными: он сам себя или это всё же кто-то внешний даёт ему данные?
32: Точка с запятой после закрывающей скобки определения класса.
33: Где main()?
AzgardC
7 / 7 / 0
Регистрация: 18.10.2012
Сообщений: 81
17.02.2013, 17:18  [ТС]     Начало ООП #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
#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))
Kuzia domovenok
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,922
Записей в блоге: 1
17.02.2013, 17:21     Начало ООП #17
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
7: array

Не по теме:

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


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

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

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

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

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

Например, для массива целесообразно задавать конструктор с параметром, например, размером массива...и т.д.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2013, 15:05     Начало ООП
Еще ссылки по теме:

ООП Классы - C++
#include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;string&gt; #include &lt;iomanip&gt; #include &lt;sstream&gt; #include &lt;limits&gt; using...

Матрицы и ООП - C++
Как эти задачи решить с помощью ООП 1. проверка матрици на симетричность относительно побочной диагонали 2. заполнение матрици по...

Вопрос по ООП - C++
Стоит ли реализовывать программу через классы, если в главной ф-ции предполагается создание только одного объекта? Вобщем решил...

VS 2013 и ООП - C++
столкнулся с проблемой. вроде пытаюсь освоить Directx11 по урокам (не помню ника, с этого форума ). Так вот, столкнулся с проблемой, а...

Вопрос по ООП - C++
Вот код class time { private: int hours; int minutes; public: int sum_time(time object, days day); ...


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

Или воспользуйтесь поиском по форуму:
AzgardC
7 / 7 / 0
Регистрация: 18.10.2012
Сообщений: 81
18.02.2013, 15:05  [ТС]     Начало ООП #20
ITcrusader, Все понял! Спасибо!
Yandex
Объявления
18.02.2013, 15:05     Начало ООП
Ответ Создать тему
Опции темы

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