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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 43, средняя оценка - 4.67
No10
30 / 28 / 2
Регистрация: 03.06.2010
Сообщений: 465
#1

Наследования класса как public, private и protected - C++

27.06.2012, 14:52. Просмотров 6340. Ответов 6
Метки нет (Все метки)

Ну допустим у нас есть класс который наследуется как public:
C++
1
2
3
class Cylinder : public Point {
// ...здесь код
}
Класс Cylinder наследует protected и public элементы, элементы private не наследуются, класса Point. А что насчёт наследования как private и protected? Пожалуйста объясните. В моей книге этого не написано.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.06.2012, 14:52
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Наследования класса как public, private и protected (C++):

Protected Private Public - C++
Возник вопрос, немного наверное бредовый и на практике наврятли применимый, но всё же интересно, а возможно поменять модификатор доступа в...

private, protected, public - C++
class test { public: test(); int getPrivate(); int vpublic; protected: int vprotected; private: int vprivate;

Public, Private, Protected (смысл применения) - C++
Прошу Вас пояснить реальный смысл ключевых слов, перечисленных в теме. С уважением

Ключевые слова private, public, protected - C++
Смысл ключевых слов private, public, protected в списке базовых классов при декларации производного класса?

Наследование. Помогите с этими public, protected. private - C++
Вот код, в нем вылетает ошибка Unit2.cpp(16): E2251 Cannot find default constructor to initialize base class 'My' в файле unit2.cpp во...

Рекомендация: сначало public, потом protected/private - C++
На хабре есть статья "90 рекомендаций по стилю написания программ на C++". Интересует вот этот пункт: 44. Разделы класса public,...

6
MrGluck
Модератор
Эксперт CЭксперт С++
7769 / 4805 / 745
Регистрация: 29.11.2010
Сообщений: 13,122
27.06.2012, 14:54 #2
При private-наследовании все члены становятся private.
При protected - public становится protected, остальные как есть (private=>private, protected=>protected).
1
CheshireCat
Эксперт С++
2903 / 1252 / 81
Регистрация: 27.05.2008
Сообщений: 3,436
27.06.2012, 14:56 #3
Нет. Наследуются все без исключения элементы (члены базового класса). Разница в правах доступа к этим членам: класс-наследник имеет доступ к public и protected членам базового класса, но не к private.
1
gray_fox
What a waste!
1551 / 1256 / 74
Регистрация: 21.04.2012
Сообщений: 2,634
Завершенные тесты: 3
27.06.2012, 14:56 #4
Цитата Сообщение от No10 Посмотреть сообщение
элементы private не наследуются
Наследуются, просто доступа из Cylinder к ним нет.
Цитата Сообщение от No10 Посмотреть сообщение
А что насчёт наследования как private и protected?
При protected все public члены базового класса становятся protected членами производного, при private наследовании - все public и protected члены базвого класса становятся private членами производного.
1
No10
30 / 28 / 2
Регистрация: 03.06.2010
Сообщений: 465
27.06.2012, 14:59  [ТС] #5
Цитата Сообщение от MrGluck Посмотреть сообщение
При private-наследовании все члены становятся private.
Тоесть при наследовании как private, производный класс не имеет доступа ни к одному из элементов базового?
0
ForEveR
В астрале
Эксперт С++
7992 / 4751 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
27.06.2012, 19:12 #6
No10, Воистину

Добавлено через 25 минут
Нет, не совсем так, неверно понял вопрос. При private наследовании через класс нельзя обратиться к открытым полям базового. Пример.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
class C
{
public:
   void print()
   {
   }
};
 
class D : private C
{
public:
   void prnt() { print(); }
};
 
int main()
{
   D d;
   d.prnt();
   d.print();
}
http://liveworkspace.org/code/1b16fb29b8c87d1ddd5e6b32a18c059c
0
gray_fox
What a waste!
1551 / 1256 / 74
Регистрация: 21.04.2012
Сообщений: 2,634
Завершенные тесты: 3
27.06.2012, 19:18 #7
Цитата Сообщение от No10 Посмотреть сообщение
Тоесть при наследовании как private, производный класс не имеет доступа ни к одному из элементов базового?
Имеет, а вот извне они уже не доступны (т.к. в наследнике стали private).
0
27.06.2012, 19:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2012, 19:18
Привет! Вот еще темы с ответами:

Для чего нужны модификаторы protected, private, public - C++
подскажите, кто в курсе, зачем вообще нужны эти модификаторы доступа? ведь, все их можно обойти... сейчас курю Страуструпа &quot;Дизайн и...

Private и public члены класса - C++
Привет! Есть такой класс: class CDateTime{ private: qint16 year_; qint8 month_, day_; qint8 hours_, minutes_,...

функции класса раздела private реализуються так же как и раздела public? в смысле виртуальных функций, дружественных функций, и т.д. - C++
функции класса раздела private реализуються так же как и раздела public? в смысле виртуальных функций, дружественных функций, и т.д.

Как переделать с public на private и создать методы для закрытых полей? - C++
Очень простой вопрос , но я только сегодня начал учить классы и возник такой вопрос - Как переделать с public на private и создать методы...


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

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

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