Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
ник нэйм
3 / 3 / 1
Регистрация: 10.11.2013
Сообщений: 175
#1

Что такое инкапсуляция? - C++

03.06.2014, 18:59. Просмотров 3332. Ответов 14
Метки нет (Все метки)

объясните пожалуйста что такое инкапсуляция и на примерах!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2014, 18:59
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Что такое инкапсуляция? (C++):

Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами? - C++
Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?

Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа? - C++
Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа?

Что такое хэндлер файла? Что такое файловый указатель? - C++
Что такое хэндлер файла? Что такое файловый указатель?

Что такое заголовочный файл? Что такое файл исходного кода? Рассмотрите назначение каждого из них - C++
Что такое заголовочный файл? Что такое файл исходного кода? Рассмотрите назначение каждого из них пожалуйста.

ООП в С++ (наследование, инкапсуляция, полиморфизм, перегрузка операторов): что читать? - C++
Нужно освежить, подзабылось. Были у меня институцкие методички доцента Шеховцова. Хороша вещь, но потерялись. Нужны либо набор...

Объяснить что такое "раздельная компиляция", что такое "интерфейс класса" и "реализация класса" на примере - C++
Есть класс, содержащий объекты и конструктор. Конструктор объявляется в одном из cpp файлов(их несколько). Можно ли, как-то, использовать...

14
Riddleman
1 / 1 / 4
Регистрация: 03.03.2013
Сообщений: 49
03.06.2014, 19:20 #2
Речь идет о том, что объект содержит не только данные, но и правила их обработки, оформленные в виде исполняемых фрагментов (методов). Например, атомобиль. Ты залил в него топливо, масло, тормозную жыдкость (это всё данные). Садишься ехать(это уже метод обработки даних - бензина в тяговую силу), и тебя не волнует как там этот бензин горит, каким образом крутящий момент передается на колеса. Дал данные, вызвал метод, получил результат; Залил топливо, завел двигатель, поехал. И вообще ГУГЛ для кого существует??? Просто я сегодня в хорошом настраении .
0
Mr.X
Эксперт С++
3059 / 1704 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
04.06.2014, 06:10 #3
Если короче, то инкапсуляция - это сокрытие сложности внутри объекта, что позволяет пользователю работать со сложным объектом как с простым.
1
camanch1
0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 44
31.10.2014, 23:32 #4
я тоже в поиске хоть какого-то примера,но почему-то и в Гугле и других системах все только рассказывается про сокрытие и т.д., примеры может кто нибудь написать или это копец! как сложно???
0
MickeyBlueEyes
Студент
120 / 131 / 12
Регистрация: 07.04.2011
Сообщений: 503
31.10.2014, 23:55 #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
class SomeClass 
{
  public:
    bool set_id(int);
    int get_id() const;
 
  private:
    int id_;
 
  private:
    bool IsValidId(int) const;
};
Вот например метод IsValidId инкапсулирован и вызываеться только внутри метода SetId для проверки корректности перед тем как присвоить его себе. Собсно вы не имеете доступа к этому методу, а вызвать токо можно внутри класса, вот пример инкапсуляции, так может быть с чем угодно.
1
Mr.X
Эксперт С++
3059 / 1704 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
01.11.2014, 00:27 #6
Цитата Сообщение от camanch1 Посмотреть сообщение
примеры может кто нибудь написать или это копец!
Ну, телевизор например. Это сложное электронное устройство, но вся его сложность инкупсулирована внутри, и для того чтобы им управлять совершенно не нужно знать физику и разбираться в работе микросхем, и даже подходить к нему не надо - он управляется с помощью простого интерфейса - путем нажатия кнопок на пульте.
1
camanch1
0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 44
01.11.2014, 00:28 #7
Я так понимаю IsValidId инкапсулирован командой "private:" а дальше с SetId не совсем понял...
Вообще я искал инкапсуляцию в C#,но т.к. это родственники,то думаю с моим примером не будет сложности:
int[] a = new int[5];
a[0] = 0; a[1] = 2; a[2] = 4; a[3] = 6; a[4] = 8;
Console.Write("Вывод компонентов массива: ");
for (int i = 0; i < a.Length; i++) { Console.Write(a[i]); }
КАК мне инкапсулировать этот дурацкий массив и как это должно выгледить,для меня это дремучий лес... плакать и смеяться охото одновременно...
0
Mr.X
Эксперт С++
3059 / 1704 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
01.11.2014, 00:32 #8
Хотя иногда эта инкапсуляция и боком выходит. Я слышал историю, как один товарищ не стал снимать с монитора пленочную упаковку - так ему красивше показалось, а монитор возьми да и сгори. Так что немного фиськи знать надо все же.
0
camanch1
0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 44
01.11.2014, 00:36 #9
хорошо...это все понятно...я хочу инкапсулировать массив,что для этого необходимо,я это просто не могу представить,как индейцы майя,не видели плывущего коробля перед носом,так как они не знали что это такое,понимаете о чем я
0
Mr.X
Эксперт С++
3059 / 1704 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
01.11.2014, 00:48 #10
Цитата Сообщение от camanch1 Посмотреть сообщение
я хочу инкапсулировать массив,что для этого необходимо
Класс - это абстрактный тип данных, т.е. инкапсуляция всегда применяется для реализации некоей абстракции, например стек инкапсулирует контейнер с целью реализации абстракции стека. Определитесь сначала какую абстракцию вы хотите реализовать вашей инкапсуляцией.
0
camanch1
0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 44
01.11.2014, 01:02 #11
Если вы говорите о модификаторе то: public class Vektor, дальше не знаю какие должны быть поля и что еще должно быть чтобы вызвать "что-то" что бы это все работало и мог использовать другой к примеру программист,как DLL...что я тут написал сам не понял...
0
MickeyBlueEyes
Студент
120 / 131 / 12
Регистрация: 07.04.2011
Сообщений: 503
01.11.2014, 10:57 #12
Опечатка:
SetId
так:
C++
1
bool set_id(int);
Тута я имел ввиду что происходит проверка, если вас это ввело в заблуждения.
0
Black Fregat
2391 / 1206 / 299
Регистрация: 31.05.2009
Сообщений: 4,769
01.11.2014, 18:33 #13
camanch1, если нужно "инкапсулировать массив", то, скорее всего, это означае следующее:
1) Должен быть создан класс, внутри которого содержится этот самый массив.
2) Должны быть предусмотрены методы класса, обеспечивающие заполнение и обработку этого массива.
Например:
- заполнение массива случайными значениями
- сортировка массива
- выдача массива на печать
3) Основная программа должна обращаться к массиву только через эти методы
1
Sasha Pr
2 / 2 / 1
Регистрация: 01.11.2014
Сообщений: 19
01.11.2014, 20:29 #14
Инкапсуляция это механизм скрытия данных. Но не только. Это ещё когда данные (свойства) и функции (методы), которые обрабатывают их, объединены в общей оболочке. Например в классе.
Но главное это скрытие информации. Управлять изменением данных можно с помощью модификаторов доступа: public, private и protected.
Пока что я себе это так представляю, например, есть класс:

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
#include <iostream>
using namespace std;
 
class human
{
    // свойства (переменные) класса
public:
    int age;
private: // доступ открыт самому классу (т.е. функциям-членам данного класса) и друзьям (friend) данного класса, как функциям, так и классам
    int weight;
protected: // доступ открыт классам, производным от данного
    int height;
 
    // методы (функции) класса
public: // ко всем функциям, в public зоне, можно получить доступ из любой части программы
    void set_weight(int a)
    {
        weight = a;
    }
 
    void get_weight()
    {
        cout << weight << endl;
    }
 
    void set_height(int b)
    {
        height = b;
    }
 
    void get_height()
    {
        cout << height << endl;
    }
};
 
int main(){
 
    human Sonia;
 
    Sonia.age = 30;
    cout << Sonia.age << endl;
    //Sonia.weight = 60; // так не получается задать значение этому полю, потому что оно в прайвейт области private
    //Sonia.height = 179; // и этому так же, потому что оно в protected области
 
    // но с помощью функций, которые расположены в public области, можно работать со свойствами класса, которые в private и protected.
    // вот так:
    Sonia.set_weight(50); // задаём вес
    Sonia.get_weight(); // выводим вес
    Sonia.set_height(168); // устанавливаем рост
    Sonia.get_height(); // получаем рост    
 
    system("pause > nul");
    return 0;
}
Добавлено через 11 минут
Короче, инкапсуляция это скрытие (управление доступом) информации с помощью модификаторов доступа + объединение данных и функций в общей оболочке.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7772 / 4808 / 747
Регистрация: 29.11.2010
Сообщений: 13,127
01.11.2014, 21:00 #15
Не понятно почему, исчезла кнопка "Лучший ответ", но вообщем пост ниже описывает всю суть.
Цитата Сообщение от Mr.X Посмотреть сообщение
Если короче, то инкапсуляция - это сокрытие сложности внутри объекта, что позволяет пользователю работать со сложным объектом как с простым.
Сразу видно, кто "Совершенный код" читал.
1
01.11.2014, 21:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2014, 21:00
Привет! Вот еще темы с ответами:

Что такое перегрузка оператора? Что у меня в коде за ошибка? - C++
Что же я написал?? Что оно не компилится? Что значит error C2275: Superclass: недопустимое использование этого типа в качестве выражения ...

В этой части кода происходит объявление функций? Что такое void? Что в скобках? - C++
В этой части кода происходит объявление функций? Что такое void? Что в скобках? void get(float **mas, int N, int M); void...

Что такое #, include, что это означает - C++
______

Код не работает,говорит,что не знает,что такое delay(100).в чём проблема?как сделать,чтоб программа заработала? - C++
#include &lt;graphics.h&gt; #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;dos.h&gt; int main() { int...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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