вопрос о деривации классов в с ++? - PullRequest
0 голосов
/ 29 мая 2010

Я хочу знать кое-что о выводе классов в C ++ поэтому у меня есть суперкласс х и унаследованный класс у и я сделал это

class x{
    public:a;
    private:b;
    protected:c;
}    
class y:public x{
    public:d;
}

в этом случае как y может получить доступ к a, b и c и как я имею в виду (публичный, защищенный, приватный)

второй случай:

class x{
    public:a;
    private:b;
    protected:c;
}    
class y:private x{
    public:d;
}

тот же вопрос?

третий случай:

class x{
    public:a;
    private:b;
    protected:c;
}    
class y:protected x{
    public:d;
}

опять тот же вопрос?

извините, я думаю, что написал слишком много прощай

Ответы [ 3 ]

5 голосов
/ 29 мая 2010
  1. При всех формах наследования:

    • y может посмотреть на свой базовый класс (x) и увидеть public и protected.
    • Производные классы y могут видеть его public и protected членов.
    • Пользователи y могут видеть его public участников.
    • Никто не может видеть чьи-либо private с, если они не friend с.
  2. В публичном наследстве:

    • пользователи y могут посмотреть до x и увидеть public.
  3. В защищенном наследовании:
    • и public и protected части x становятся protected in y
    • Производные классы y могут их видеть.
    • Пользователи y не могут их видеть.
  4. В частном наследстве:
    • и public и protected части x становятся private in y:
    • Производные особи y не могут их видеть.
    • Пользователи y не могут их видеть.
    • Частное наследование, по сути, совпадает с составом (личный элемент данных).

Этот C ++ FAQ содержит полезную информацию о частном и защищенном наследовании.

0 голосов
/ 29 мая 2010
  • Производные классы не могут получить доступ к закрытым членам базового класса, если производный класс не является другом базового класса.
  • Права наследования:
    • Public - все не частные члены базового класса сохраняют свои разрешения (база: общедоступная, производная: общедоступная; база: защищенная, производная: защищенная)
    • Защищено - все открытые члены базового класса становятся защищенными в производном классе; защищенные члены в базовом классе все еще защищены (база: общедоступная, производная: защищенная; база: защищенная, производная: защищенная)
    • Приватный - все не приватные члены базового класса становятся частными в производном классе (базовый: общедоступный, производный: частный; базовый: защищенный, производный: частный)

Я не могу не подчеркнуть, что частные члены базового класса недоступны для производного класса, если только этот производный класс не объявлен другом базового класса.

0 голосов
/ 29 мая 2010
  • Производный класс может получить доступ только к открытым и защищенным элементам базового класса. Он не может получить доступ к закрытым членам базового класса.
  • частное / публичное / защищенное наследование влияет на то, как члены, унаследованные от базового класса (X), доступны "пользователям" производного класса (Y); теперь пользователи могут быть классами, производными от этого производного класса.
  • частное наследование сродни объявлению открытых и защищенных членов базового класса в качестве частного в производном классе.
  • **protected interitance** сродни объявлению открытых и защищенных членов базового класса как защищенных в производном классе.
  • **public inheritance** делает публичные члены базового класса публичными в производном классе; но защищенные члены базового класса остаются защищенными в производном классе.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...