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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Викдон
67 / 67 / 4
Регистрация: 21.11.2008
Сообщений: 226
#1

PROTECTED - C++

09.04.2009, 01:03. Просмотров 1095. Ответов 10
Метки нет (Все метки)

есть два класса:

C++
1
2
3
4
5
6
7
8
9
class Base{
 private:
  int age;
 
};
 
class Derived: public Base{
.......
};
Написано было что члены класса объявленные как private, недоступны для наследования, но объект класса Derived включает в себя поле age ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2009, 01:03     PROTECTED
Посмотрите здесь:

protected или не protected : ) - C++
собстно не могу решить как поступить. есть абстрактный класс окошка, являющийся базовым для всех окошек. есть 3 варианта...

Protected в классах - C++
#include <iostream> using namespace std; class TPoint{ protected: int x,y; TPoint *t; ...

Protected Struct - C++
Привет народ. Сижу тут с классами корочь, и вдруг вылезла ошибка (типа нет доступа), но никак не могу понять почему: ошибка в 33-й строке,...

Protected DVD - C++
Доброго дня! Не нашел нужного раздела для подобной темы... Суть в чем - как можно определить, является ли DVD диск защищенным от...

Обращение к члену protected - C++
Добрый день, помогите разобраться Обращение к члену protected, сообщается ошибкой Код класса: #include <iostream> #include <string>...

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

Область видимости Protected - C++
Еcть некий класс player и есть в нем переменная id в области паблик. Есть второй класс team который использует эту переменную. Пjка эти...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Monte-Cristo
2787 / 1373 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
09.04.2009, 01:13     PROTECTED #2
да... но ты не имеешь доступ к этому полю из класса Derived

Добавлено через 8 минут 21 секунду
например, так нельзя....

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class A
{
    private:
        int x;
};
 
class B: public A
{
    public:
        void out()
        {
            x = 100;
            cout << x;
        }
};
а так можно

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class A
{
    protected:
        int x;
};
 
class B: public A
{
    public:
        void out()
        {
            x = 100;
            cout << x;
        }
};
denix
63 / 63 / 2
Регистрация: 11.01.2009
Сообщений: 130
09.04.2009, 09:43     PROTECTED #3
Цитата Сообщение от Викдон Посмотреть сообщение
есть два класса:

C++
1
2
3
4
5
6
7
8
9
class Base{
 private:
  int age;
 
};
 
class Derived: public Base{
.......
};
Написано было что члены класса объявленные как private, недоступны для наследования, но объект класса Derived включает в себя поле age ?
На самом деле можно получить доступ через базовый класс при private наследовании
Monte-Cristo
2787 / 1373 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
09.04.2009, 09:52     PROTECTED #4
denix, покажите каким образом?

при

C++
1
2
3
4
5
6
7
8
9
class Base{
 private:
  int age;
 
};
 
class Derived: private Base{
.......
};
вы это имели ввиду?
denix
63 / 63 / 2
Регистрация: 11.01.2009
Сообщений: 130
09.04.2009, 09:55     PROTECTED #5
Конечно нет, я имел ввиду через привидение указателя набазовый класс
Monte-Cristo
2787 / 1373 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
09.04.2009, 10:30     PROTECTED #6
а не можете ли вы показать как именно? а то я не могу понять, что именно вы хотите сказать.
Humanitis
172 / 164 / 6
Регистрация: 12.01.2009
Сообщений: 430
09.04.2009, 10:36     PROTECTED #7
Вот мне тоже интересно стало,как это возможно
Викдон
67 / 67 / 4
Регистрация: 21.11.2008
Сообщений: 226
09.04.2009, 12:15  [ТС]     PROTECTED #8
наверное он имел ввиду использовать скажем метод SetAge(int) в базовом классе, и вызвать его явно в объекте класса Derived.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Base{
 public:
 void SetAge(int a){age=a;}
 
 private:
  int age;
 
};
 
class Derived: private Base{
.......
};
 
int main(){
 
Derived obj;
obj.Base::SetAge(5);
 
return 0;
}
denix
63 / 63 / 2
Регистрация: 11.01.2009
Сообщений: 130
09.04.2009, 12:23     PROTECTED #9
да нет, ребята, стормозил, не прокатит, извиняюсь
ISergey
Maniac
Эксперт С++
1372 / 883 / 52
Регистрация: 02.01.2009
Сообщений: 2,652
Записей в блоге: 1
09.04.2009, 12:44     PROTECTED #10
вот так можно сделать
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
#include <iostream>
using namespace std;
 
class base
{
private:
    int x;
    friend class foo;
};
 
class foo: public base
{
public:
    void out()
    {
        this->x = 10;
        cout<<this->x<<endl;
    }
};
int main()
{
    foo f;
    f.out();
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2009, 18:55     PROTECTED
Еще ссылки по теме:

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

c++ доступ к protected свойствам - C++
давайте рассмотрим доступ к protected свойствам и методам класса известно что напрямую их вызвать можно только внутри класса...

Доступ внука к Protected - C++
Здравствуйте, сегодня встал перед такой проблемой. Дело в том, что создал класс, наследующий public доступом по цепочке (внук). Но если...

protected и его назначение - C++
Не понятно назначение ключевого слова протектед, хотя пишут что он нужен для класса-потомка, только зачем? Вот код, растолкуйте на нём ,что...

Доступ к protected полям - C++
Добрый день! Очень не часто пишу что-то на C++ и вот такой момент настал :) Существует некий абстрактный класс содержащий указатель на...


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

Или воспользуйтесь поиском по форуму:
Monte-Cristo
2787 / 1373 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
09.04.2009, 18:55     PROTECTED #11
Цитата Сообщение от Викдон Посмотреть сообщение
class Derived: private Base
только при public наследовании...


Цитата Сообщение от Викдон Посмотреть сообщение
obj.Base::SetAge(5);
можно записать уже и так: obj.SetAge(5);, так как этот метод наследуется.

ISergey, ну это естевсвтенно, так как ты класс сделал дружественным.
Yandex
Объявления
09.04.2009, 18:55     PROTECTED
Ответ Создать тему
Опции темы

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