13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026

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

28.10.2011, 15:38. Показов 8491. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru