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

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

Войти
Регистрация
Восстановить пароль
 
zzz_
5 / 5 / 0
Регистрация: 08.05.2011
Сообщений: 215
#1

Изменение уровня доступа при наследовании - C++

02.05.2012, 19:48. Просмотров 882. Ответов 7
Метки нет (Все метки)

Ситуация такая
C++
1
2
3
4
5
6
7
class A
{protected: int c;
};
class B:public A
{public:
A::c;
}
Ругается - пишет что мол попытка изменения доступа A::c. Почему вроде читал, что должно работать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2012, 19:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Изменение уровня доступа при наследовании (C++):

Странности уровня доступа при наследовании - C++
Всем привет! :) Сегодня ночью меня озадачило странное поведение при наследовании классов. А именно — уровень доступа к унаследованным...

Спецификаторы доступа при наследовании - C++
Здравствуйте. Интересует такой вопрос: может ли как-то повлиять на доступ из производного класса к членам базового класса постановка при...

почему обявление уровня доступа является нежелательным способом предявления доступа, в отличии от использования пространстрва имён? - C++
почему обявление уровня доступа является нежелательным способом предявления доступа, в отличии от использования пространстрва имён?

Использование шаблонов при наследовании, ошибка при компиляции - C++
При изучении списков написал шаблон протестировал, все работает. После написал класс наследник от шаблона List.h, компилятор выдает...

Конструкторы при наследовании - C++
Добрый вечер. Пишу программу с наследованием классов. Класс-родитель - nasled, производный от него - steck. Когда пытаюсь вызвать...

Деструктор при наследовании - C++
Имеется 3 класса (базовый -> производный -> производный2) в классе базовый имеется переменная char* var; в производном тоже есть 1...

7
JokerNN
133 / 129 / 36
Регистрация: 29.12.2011
Сообщений: 359
02.05.2012, 20:01 #2
Не должно, протектед члены доступны только членам иерархии, а у вас получается, что через класс B переменную c может поменять кто угодно, заверните доступ к с через паблик методы класса В. Тогда всё будет работать
0
AAA-
13 / 13 / 1
Регистрация: 14.02.2012
Сообщений: 46
02.05.2012, 20:03 #3
протектед в классе B должно быть
0
zzz_
5 / 5 / 0
Регистрация: 08.05.2011
Сообщений: 215
02.05.2012, 20:09  [ТС] #4
AAA-, Дак и так он наследуется протектед, я переопределить хчу

Добавлено через 33 секунды
Цитата Сообщение от JokerNN Посмотреть сообщение
Не должно, протектед члены доступны только членам иерархии, а у вас получается, что через класс B переменную c может поменять кто угодно, заверните доступ к с через паблик методы класса В. Тогда всё будет работать
Просто говорят, что можно изменить уровень доступа
0
Toshkarik
1143 / 860 / 51
Регистрация: 03.08.2011
Сообщений: 2,390
Завершенные тесты: 1
02.05.2012, 20:11 #5
Смысл вообще тогда в уровне доступа, если его может изменить любой наследник?
0
zzz_
5 / 5 / 0
Регистрация: 08.05.2011
Сообщений: 215
02.05.2012, 20:23  [ТС] #6
Цитата Сообщение от Toshkarik Посмотреть сообщение
Смысл вообще тогда в уровне доступа, если его может изменить любой наследник?
Ну а friend, он же тоже для этого

Добавлено через 11 минут

Не по теме:

А что представляется тут под наследованием. То что создаются якобы два объекта - базовый и производный?


Не по теме:

То есть объекты базовых классов включаются в объекты производных?

0
Bers
Заблокирован
02.05.2012, 20:24 #7
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class CTest
{
protected:
    void Test() { std::cout<< "test passed\n";}
};
 
class CDerrive: public CTest
{
public:
    using CTest::Test;
};
 
int main()
{
    CDerrive test;
    test.Test();
}
0
zzz_
5 / 5 / 0
Регистрация: 08.05.2011
Сообщений: 215
02.05.2012, 20:25  [ТС] #8
Цитата Сообщение от Bers Посмотреть сообщение
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class CTest
{
protected:
    void Test() { std::cout<< "test passed\n";}
};
 
class CDerrive: public CTest
{
public:
    using CTest::Test;
};
 
int main()
{
    CDerrive test;
    test.Test();
}
Спасибо, но компилятор Borland C++ 3.1
0
02.05.2012, 20:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2012, 20:25
Привет! Вот еще темы с ответами:

Ошибка при наследовании - C++
Здраствуйте,не могу понять где именно оштбся,возможно кто-то поможет,код прилагаю //#include &quot;stdafx.h&quot; #include &lt;iostream&gt; ...

Конструкторы при наследовании - C++
Описал большую иерархию классов. Надо написать конструкторы, правда уже не очень понимаю как в Си писать конструкторы, к тому же при...

С++ течет при наследовании - C++
Если был создан класс где его поля размещались в стеке (Foo) и унаследован классом (Foo1) который создается динамически. Как...

Ошибка при наследовании - C++
Вот такой код: class Figure2 { protected: int Color; int CenterX; int CenterY; public:


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

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

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