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

Объясните про наследование - C++

Восстановить пароль Регистрация
 
Merovingian
54 / 54 / 5
Регистрация: 24.09.2011
Сообщений: 149
07.10.2011, 15:28     Объясните про наследование #1
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 A
{
protected:
    int n; // закрыты для A, но доступны для B
public:
    virtual void func(void) = 0;
};
 
class B: public A
{
public:
    void func(void) 
    {
        //какие то действия с n;
    }
};
int main(void)
{
    B x;
    x.func();
/////////////////////////////////ОШИБКА///////////////////////////////////////
    x.n.какой-то-метод-над-n();
/////////////////////////////////ОШИБКА///////////////////////////////////////
    return 0;
}
Для объекта x класса B int n - недоступное поле, и может быть доступно только через метод. Можно ли каким то образом сделать так, чтобы x получил доступ к n? Кроме как объявить public int n в классе A, хочу чтобы для класса A поле int n отавалось недоступным.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2011, 15:28     Объясните про наследование
Посмотрите здесь:

Небольшой вопрос про наследование. C++
Про наследование от exception C++
C++ Вопрос про наследование.
C++ Глупый вопрос про наследование
C++ Объясните про инициализацию
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
07.10.2011, 15:38     Объясните про наследование #2
C++
1
2
3
4
5
6
7
8
9
class B: public A
{
public:
        void func(void) 
        {
                //какие то действия с n;
        }
        int &getN() {return n;} 
};
Merovingian
54 / 54 / 5
Регистрация: 24.09.2011
Сообщений: 149
07.10.2011, 15:50  [ТС]     Объясните про наследование #3
Цитата Сообщение от gooseim Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
class B: public A
{
public:
        void func(void) 
        {
                //какие то действия с n;
        }
        int &getN() {return n;} 
};
Ну это ясно) А если не пользоваться никаким методом , то никак низя?
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
07.10.2011, 15:52     Объясните про наследование #4
Merovingian, никак нельзя.

Добавлено через 1 минуту
Кстати публичные члены-переменные вообще плохой стиль программирования.
Merovingian
54 / 54 / 5
Регистрация: 24.09.2011
Сообщений: 149
07.10.2011, 18:38  [ТС]     Объясните про наследование #5
кстати а если объявить в классе B: public A::n;
???
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
07.10.2011, 18:39     Объясните про наследование #6
C++
1
public: int n;
Это значит, что переменная n доступна абсолютно для всех.
C++
1
private: int n;
Это значит, что переменная n доступна только классу( и друзьям), в которой объявлена эта переменная.
C++
1
protected: int n;
Это значит, что переменная n доступна не только своему классу и друзьям, но и еще доступна всем производным классам и друзьям эти производных классов. Ну а раз она доступна для класса B, то она так же будет доступна для класса C, если класс C наследует класс B. Т.е. переменная n доступна всем классам ниже по иерархии.
Merovingian
54 / 54 / 5
Регистрация: 24.09.2011
Сообщений: 149
07.10.2011, 18:43  [ТС]     Объясните про наследование #7
Цитата Сообщение от Chelioss Посмотреть сообщение
C++
1
public: int n;
Это значит, что переменная n доступна абсолютно для всех.
C++
1
private: int n;
Это значит, что переменная n доступна только классу( и друзьям), в которой объявлена эта переменная.
C++
1
protected: int n;
Это значит, что переменная n доступна не только своему классу и друзьям, но и еще доступна всем производным классам и друзьям эти производных классов. Ну а раз она доступна для класса B, то она так же будет доступна для класса C, если класс C наследует класс B. Т.е. переменная n доступна всем классам ниже по иерархии.
Я немного не тем интересовался)
я про то, что вот так
C++
1
x.n.какой-то-метод-над-n();
нельзя обратиться к int n, если x принадлежит к классу B
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
07.10.2011, 18:47     Объясните про наследование #8
C++
1
2
protected:
        int n; // закрыты для A, но доступны для B
Не правильно. n доступна как для A, так и для B.
C++
1
x.n.какой-то-метод-над-n();
Тут у вас точно две точки?
Тогда не правильно. Я же написал, что protected переменные доступны только для классов A и B, но не доступны для клиентов, т.е. если я пишу программу и использую класс B, то я не имею доступа к n.
Так можно было бы написать, если, конечно, n -это не int, а какой-то класс, переменная n была бы public.

Понял, что вы имели введу. У объекта n типа int нет методов, поэтому нельзя делать как вы.
Встроенные типы(int,double,char и т.д.) не имеют методов.
Merovingian
54 / 54 / 5
Регистрация: 24.09.2011
Сообщений: 149
07.10.2011, 18:57  [ТС]     Объясните про наследование #9
Цитата Сообщение от Chelioss Посмотреть сообщение
Тогда не правильно. Я же написал, что protected переменные доступны только для классов A и B, но не доступны для клиентов.
Так я в курсе что не правильно, вы почитайте что я под кодом написал) Там вопрос между прочим


Цитата Сообщение от Chelioss Посмотреть сообщение
Не правильно. n доступна как для A, так и для B.
ну вот только этого не надо))) protected члены закрыты по отношению к базовому классу и доступны классу-наследнику
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
07.10.2011, 19:03     Объясните про наследование #10
Цитата Сообщение от Merovingian Посмотреть сообщение
protected члены закрыты по отношению к базовому классу
закрыты из вне, внутри базового они доступны
Merovingian
54 / 54 / 5
Регистрация: 24.09.2011
Сообщений: 149
07.10.2011, 19:08  [ТС]     Объясните про наследование #11
Цитата Сообщение от Chelioss Посмотреть сообщение
Понял, что вы имели введу. У объекта n типа int нет методов, поэтому нельзя делать как вы.
Встроенные типы(int,double,char и т.д.) не имеют методов.
ну не в том же дело

методы то можно создать, но всеравно таким образом нельзя обратиться к n. Я спрашивал как сделать так, чтобы открыть доступ к n))

и похоже я нашел решение - объявить в классе:
C++
1
B: public A::n;
Добавлено через 2 минуты
Цитата Сообщение от Jupiter Посмотреть сообщение
закрыты из вне, внутри базового они доступны
Я то имею ввиду, что закрытые и открытые - это private и public... и это, конечно все внутри класса.... А понятие "доступ" - у меня оно ассоциируется с понятием "наследование".... ну короче понимаете про что я)
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
07.10.2011, 19:44     Объясните про наследование #12
Merovingian
При public наследовании protected данные класса A, становятся protected данными класса B.

И еще раз, раз вы не поняли:
Нет у int методов и нельзя создавать для int методы. Так же нельзя перегружать операции для встроенных типов, в точности операцию "." , для встроенных типов.
Нельзя делать вот так:
n.fun(); если n - это переменная типа int.

Добавлено через 3 минуты
Цитата Сообщение от Merovingian Посмотреть сообщение
Я то имею ввиду, что закрытые и открытые - это private и public... и это, конечно все внутри класса.... А понятие "доступ" - у меня оно ассоциируется с понятием "наследование".... ну короче понимаете про что я)
Вот я не понимаю. Понимать одно под другим - это плохо. Потому что, когда вы будете говорить об этой теме, то всегда, как и сейчас, у вас будут такие вот разговоры о "понимании".
MrGluck
07.10.2011, 19:49
  #13

Не по теме:

Мне кажется это извращенство и нарушает инкапсуляцию

Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
07.10.2011, 19:51     Объясните про наследование #14
Цитата Сообщение от MrGluck Посмотреть сообщение

Не по теме:

Мне кажется это извращенство и нарушает инкапсуляцию

Поэтому лучше обращаться к данным через методов-посредников.

Добавлено через 1 минуту
Вот как вообще связаны между собой наследование и доступ? Я не понимаю, а вы как-то умудряетесь.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2011, 20:13     Объясните про наследование
Еще ссылки по теме:

C++ Наследование. я чего-то не разберусь с доступом.объясните пожалуйста
Объясните про strchr C++
Популярно объясните про указатели C++

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

Или воспользуйтесь поиском по форуму:
Merovingian
54 / 54 / 5
Регистрация: 24.09.2011
Сообщений: 149
07.10.2011, 20:13  [ТС]     Объясните про наследование #15
Цитата Сообщение от Chelioss Посмотреть сообщение
Вот я не понимаю. Понимать одно под другим - это плохо. Потому что, когда вы будете говорить об этой теме, то всегда, как и сейчас, у вас будут такие вот разговоры о "понимании".
Хватит палку уже перегибать, посмотрите лучше в любой учебник или справочник и посмотрите что такое "доступ" и что такое "закрытые" и что такое "открытые", если вам что-то не понятно. А называли бы все своими именами, то, может быть, и я бы вас понял.

Добавлено через 5 минут
Цитата Сообщение от Chelioss Посмотреть сообщение
Вот как вообще связаны между собой наследование и доступ? Я не понимаю, а вы как-то умудряетесь.
Я между прочим хоть еще и очень плохо освоил ООП, но очень правильно дал определение:
protected члены закрыты по отношению к базовому классу и доступны классу-наследнику
Yandex
Объявления
07.10.2011, 20:13     Объясните про наследование
Ответ Создать тему
Опции темы

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