Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.58/40: Рейтинг темы: голосов - 40, средняя оценка - 4.58
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026

Вопрос про Спецификаторы доступа Public и Private

28.10.2011, 15:38. Показов 8414. Ответов 42
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Читаю Дейтлов...
Дошел до объяснения спецификаторов и не могу понять 2 предложения:
Доступ по умолчанию к элементам класса-закрытый(private),поэтому все элементы между заголовком класса и первым спецификатором доступа являются закрытыми .Спецификаторы public и private могут повторяться,хотя в этом нет необходимости и может приводить к путанице
Еще:
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
class GradeBook
{
public:
  
   void setCourseName( string name )
   {      
      courseName = name; // store the course name in the object
   } 
   
 
   string getCourseName() 
   {
      return courseName;
   } 
 
 
   void displayMessage()
   {
    
      cout << "Welcome to the grade book for\n" << getCourseName() << "!" 
         << endl;
   } 
private:
   string courseName; 
};
А почему строка
C++
1
2
3
4
   } 
private:
   string courseName; 
};
объявлена в самом конце,а не в начале ?Ведь переменная должна объявляться до ее использования.
Еще комментарий к этой же строке написан "Название курса для данного GradeBook".Как это понимать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.10.2011, 15:38
Ответы с готовыми решениями:

Модификаторы доступа public, private, protected
Есть ли в Си модификаторы доступа public, private, protected?

Изменить модификаторы доступа public к полям класса на private
Был тут вот такой код: namespace ConsoleApplication3 { class Room { public double length; //длина ...

Public и Private
Доброго времени суток! Написал код и понял, что некоторые методы должны быть private, а не public. Если переношу их в private, то...

42
Заблокирован
29.10.2011, 18:45
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Bers Посмотреть сообщение

Не по теме:



ви таки есть анархист!
*деловито срисовал ссылочку*



Добавлено через 17 часов 42 минуты
кстати. Вот очень красноречивый пример того, насколько реально важен порядок объявления данных-членов класса:

1. От порядка, в котором объявляются данные члены класса зависит размер класса:

C++
1
2
3
4
5
    struct test { int i,n;  char c;       };
    struct test2 { int i; char c; int n;   };
 
    std::cout<< sizeof(test)<<std::endl;
    std::cout<< sizeof(test2)<<std::endl;
2. ВАЖНЫЙ МОМЕНТ!!!!
От порядка объявления данных членов в классе зависит то, насколько корректно сработает инициализация данных-членов в списке инициализации:



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
template <class tName, class tCont = std::vector<tName> >
class CTest
{
public:
    CTest(cSize_a nSizeX, cSize_a nSizeY, const tName& nNullElement=tName() );
private:
    //если данные члены переставить местами
    //myTable проинициализируется мусором, 
    //а не корректным значением myNULL_Element
    tName myNULL_Element;   
    std::vector<tCont> myTable;
};
 
template <class tName, class tCont>
CTest<tName, tCont>::CTest(cSize_a nSizeX, cSize_a nSizeY, const tName& nNullElement=tName() ):
myNULL_Element(nNullElement),
myTable(nSizeY, tCont(nSizeX,myNULL_Element) )
{}
И от этого зависит, так как члены класса создаются в том порядке, в каком они объявлены внутри класса. И соответственно инициализируются в списке ctor в порядке их создания, а не в том порядке, в котором они указаны в списке.
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
29.10.2011, 19:20
Цитата Сообщение от Bers Посмотреть сообщение
1. От порядка, в котором объявляются данные члены класса зависит размер класса:
Выводит 12 и 12.
Странно. Должно быть в первом случае точно 4 + 4 + 1
0
Заблокирован
29.10.2011, 20:34
Цитата Сообщение от Chelioss Посмотреть сообщение
Выводит 12 и 12.
Странно. Должно быть в первом случае точно 4 + 4 + 1
Вот более удачный пример:

C++
1
2
3
4
5
6
7
struct test0  {  int i; int n;  char c;           };
        struct test1  {  int i; int n;  char c;  char u;  };
        struct test2 { char c; int i; char u; int n;      };
 
        std::cout<< sizeof(test0)<<std::endl; //12
        std::cout<< sizeof(test1)<<std::endl; //12
        std::cout<< sizeof(test2)<<std::endl; //16
фокус в том, что структур-муктур выравнивается в памяти. Её размер всегда кратен 4.
Ну это теоретически. На практике зависит от компилятора, и арх процессора. Если я ничего не путаю. Тут нужно смотреть в сторону "выравнивание данных в памяти"

Главное что нужно понять - это что от порядка в котором объявляются данные-члены, зависит размер структуры. И что нужно стремится чары объявлять с чарами, инты с интами.
Тогда размер структуры будит минимальным без упаковки её в памяти (можно делать ещё запакованные структуры, но это потеря производительности, и нафег надо ради 1-2 байт?)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.10.2011, 20:34

Private и public
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type ...

Public: и private:
Вопрос: данные модиф. доступа могут быть записаны только 1 раз каждый class sample1{ public: int a; private: ..... }; или...

Public/private
Подскажите, пожауйста, где можно почитать про Public и Private механизмы создания документов? А то везде как-то вскольз упомянуто... Я...

Из private в public
Доброго времени суток. Подскажите, есть ли способ &quot;в ходе выполнения кода&quot; изменить статус переменной (свойства) из private в public (и/или...

Классы (private, public)
Всем добра, недавно начал осваивать С# (дня два). Нужна Ваша помощь, вернее совет, по поводу классов в C#. Создал программку...


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

Или воспользуйтесь поиском по форуму:
43
Ответ Создать тему
Новые блоги и статьи
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru