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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.79
iluxa1810
12 / 12 / 5
Регистрация: 03.09.2011
Сообщений: 1,022
28.10.2011, 15:38     Вопрос про Спецификаторы доступа Public и Private #1
Читаю Дейтлов...
Дошел до объяснения спецификаторов и не могу понять 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".Как это понимать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.10.2011, 15:38     Вопрос про Спецификаторы доступа Public и Private
Посмотрите здесь:

C++ Protected Private Public
C++ private, protected, public
C++ Private и public члены класса
Public и Private C++
C++ LNK2019: о private и public в классе
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
29.10.2011, 18:45     Вопрос про Спецификаторы доступа Public и Private #41
Цитата Сообщение от 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 в порядке их создания, а не в том порядке, в котором они указаны в списке.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
29.10.2011, 19:20     Вопрос про Спецификаторы доступа Public и Private #42
Цитата Сообщение от Bers Посмотреть сообщение
1. От порядка, в котором объявляются данные члены класса зависит размер класса:
Выводит 12 и 12.
Странно. Должно быть в первом случае точно 4 + 4 + 1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.10.2011, 20:34     Вопрос про Спецификаторы доступа Public и Private
Еще ссылки по теме:

Перевод class из public в private C++
Избавиться от public, заменив его на private C++
Наследование, спецификаторы доступа C++

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

Или воспользуйтесь поиском по форуму:
Bers
Заблокирован
29.10.2011, 20:34     Вопрос про Спецификаторы доступа Public и Private #43
Цитата Сообщение от 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 байт?)
Yandex
Объявления
29.10.2011, 20:34     Вопрос про Спецификаторы доступа Public и Private
Ответ Создать тему
Опции темы

Текущее время: 17:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru