Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Наследование, Опять классы... 
:(
    Опции темы
FTK
Дата 13.6.2005, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 11.6.2005

Репутация: нет
Всего: нет



Всем Привет!

Скажите пожалуйста, в чем отличие наследования:

Код

class B //базовый 
{
     //********************//
}

class B1:public B 
{
     //********************//
}

от

Код

class B2:protected  
{
     //********************//
}

и

Код

class B3:private
{
     //********************//
}


Буду очень благодарен, если визуально поясните =))



PM MAIL   Вверх
comcon1
Дата 13.6.2005, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: 12
Всего: 17



Вот тебе пример. Стоит заменить спецификатор наследования с PUBLIC на PRIVATE или PROTECTED. И компилятор ругнется в помеченной мною строчке.

Код

#include <iostream.h>
using namespace std;
class B {
    public:
        void pubfunc() {
            cout << "PUSH ME I'm PUBLIC class B" << endl;
        }
    private:
        void privfunc() {
            cout << "PUSH ME I'm PRIVATE class B" << endl;
        }
};

class B1: public B {
    public:
       void myfunc() {
           cout << "I'm class B1" << endl;
       }
};


int main() {
    B myclass;
    B1 inhclass;
    myclass.pubfunc();
    inhclass.pubfunc(); /// <<<<<<<<<<<<<<<<<<<<<<<<<
    inhclass.myfunc();
}

Добавлено @ 19:02
Вообще если ты наследуешь метод с каким-то спецификатором доступа:

class A{
...
public:
void metod();
..
};

А класс наследуешь, к примеру:

class B: protected A { ...

то public "умножить" на protected дает protected. И в классе B этот метод будет иметь аттрибут protected.

А вообще есть таблица умножения для аттрибутов доступа. Посмотри ее в учебнике. Вот.


--------------------
PM MAIL   Вверх
FTK
Дата 13.6.2005, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 11.6.2005

Репутация: нет
Всего: нет



Так в чем же разница? Если наследование public, то доступ тоже только к public?
Я что-то опять ничего не понял....


Код

if (me==lamer) Don't think very bad;
else write me answer


=)
PM MAIL   Вверх
comcon1
Дата 13.6.2005, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: 12
Всего: 17



Смотри. В моем примере. метод pubfunc() имеет аттрибут public.
Если я наследую класс как public, то public умножить на public будет public.

И через производный класс я получаю доступ к pubfunc().

Теперь, если я наследую класс как private, то private умножить на public будет private и через производный класс я доступ к pubfunc() НЕ ПОЛУЧАЮ. И компилятор ругается на ту строчку, где я указал smile.

Попробуй написать и ставить разные аттрибуты - сам увидишь, когда открывается тебе доступ, когда нет.


--------------------
PM MAIL   Вверх
FTK
Дата 13.6.2005, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 11.6.2005

Репутация: нет
Всего: нет



Теперь понял. smile
Тогда еще вопрос: А где найти эту таблицу?
Может есть электронная версия у тебя?


Thanks for all, who have ever helped me///
PM MAIL   Вверх
comcon1
Дата 14.6.2005, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: 12
Всего: 17



Private x (something) = private
Public x public = public
Protected x (Public or Protected) = protected


--------------------
PM MAIL   Вверх
FTK
Дата 15.6.2005, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 11.6.2005

Репутация: нет
Всего: нет



comcon1 Благодарю за помощь, теперь уж точно все ясно smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0456 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.