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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 46, средняя оценка - 4.83
Skirmisher
44 / 44 / 0
Регистрация: 23.05.2009
Сообщений: 92
#1

Ключ доступа protected - C++

01.08.2009, 00:53. Просмотров 6367. Ответов 25
Метки нет (Все метки)

В каких случаях рекомендовано использовать этот ключ доступа? Если можно, то приведите примеры.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2009, 00:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ключ доступа protected (C++):

Пишем свой класс, спецификатор доступа protected - C++
Всем привет! Из книги Р. Лафоре относительно спецификатора доступа protected: Далее пишется следующее: Возникает вопросы:...

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

PROTECTED - C++
есть два класса: class Base{ private: int age; }; class Derived: public Base{ .......

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

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

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

25
Monte-Cristo
2790 / 1376 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
01.08.2009, 12:41 #16
Skirmisher, в таблице 9.1 того же Лафоре.. указано, что досутп к полям protected имеет сам класс и его производные.


Цитата Сообщение от Skirmisher Посмотреть сообщение
const char *idCameraPosition:ositionStr[] =
что такое *idCameraPosition ?
1
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
01.08.2009, 12:48 #17
Цитата Сообщение от Skirmisher Посмотреть сообщение
C++
1
const char *idCameraPosition::positionStr[] = {
C++
1
const char *Camera::positionStr[] = {
protected:
static const char* positionStr[POSITION_COUNT];
long time;
};
0
Skirmisher
44 / 44 / 0
Регистрация: 23.05.2009
Сообщений: 92
01.08.2009, 13:01  [ТС] #18
Защищенные члены
Защищенные члены имеют доступ к метке и могут рассматриваться, как смешение свойств закрытых и открытых полей:

Схожее свойство закрытым членам: защищенные члены недоступны пользователям
класса.

Схожее свойство с открытыми членами: защищенные члены доступны в классах производных от этого класса.

В дополнение защищенные члены имееют другое значительное свойство:

Объект производного класса может получить доступ к защищенными членами
этого базового клсса только через объект производного класса. Производный класс
не имеет специального доступа к защищенным членам объектов этого базового класса(типа).

Например: позволим принимать определения Bulk_item методу, который ссылается на объект Bulk_item и ссылается на объект Item_base. Эта функция может иметь доступ к защищенным членам основного объекта также, как все эти параметры Bulk_item/
Однако, он не имеет специального доступа к защищенным членам в параметре Bulk_item:
void Bulk_item::memfcn(const Bulk_item &d, const Item_base &b)
{
// доступ для того чтобы использовать защищенный член
double ret = price; // ok: используй this->price
ret = d.price; // ok: использую price от объекта Bulk_item
ret = b.price; // ошибка: нет доступа к price от Item_base
}
Когда проектируешь класс, для того чтобы продолжить работать с базовым классом,
критерий проектирования члена, такого как public не изменяйте: он по-прежнему, является случаем интерфейса функций должны быть как public и данные в основном должны быть, как не public. Класс спроектированный для того чтобы наследовать от
должных решенных частей выполнения, для того чтобы объявить их, как защищенные
и некоторые должны быть закрытыми . Член должен быть закрытым, если мы желаем предотвратить более поздние производные классы от доступа к этому члену. Член должен быть защищенным, если он поставляет операцию или данные, которые будут нуждаться к использованию в производном классе при его выполнении. Другими словами интерфейс производного класса является комбинацией обоих защищенных
и открытых членов.


Добавлено через 2 минуты 12 секунд
Цитата Сообщение от Skirmisher Посмотреть сообщение
Статичекое защищенное поле:
Camera.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
class Camera
{
public:
        Camera(long t) {
                time = t;
        }
virtual ~Camera() {
        }
protected:
        static const char* positionStr[POSITION_COUNT];
             long time;
}
Camera.cpp
C++
1
2
3
4
5
6
7
#include "Camera.h"
...
const char *Camera::positionStr[] = {
    "Fixed",
    "Interpolated",
    "Spline",
};
Вот такой код, однако все равно выдает lnk2001
Возникает ошибка линковки 2001
0
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
01.08.2009, 13:25 #19
Skirmisher, удалите свой некорректный перевод текста.
0
Skirmisher
44 / 44 / 0
Регистрация: 23.05.2009
Сообщений: 92
01.08.2009, 13:28  [ТС] #20
Цитата Сообщение от zim22 Посмотреть сообщение
Skirmisher, удалите свой некорректный перевод текста.
Уже не могу. Извините хотел , как лучше получилось, как всегда
0
Monte-Cristo
2790 / 1376 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
01.08.2009, 14:00 #21
Skirmisher, в твоем варианте ты уазателю на массив символов (строку) присваеваешь значение несколких строк.

Добавлено через 3 минуты 41 секунду
и вообще тебе зачем статический константый объект?
0
Skirmisher
44 / 44 / 0
Регистрация: 23.05.2009
Сообщений: 92
01.08.2009, 14:44  [ТС] #22
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
Skirmisher, в твоем варианте ты уазателю на массив символов (строку) присваеваешь значение несколких строк.
C++
1
2
3
4
5
6
7
#include "Camera.h"
...
const char *Camera::positionStr[] = {
        "Fixed",
        "Interpolated",
        "Spline",
}; //const char **Camera::positionStr
Добавлено через 3 минуты 41 секунду
и вообще тебе зачем статический константый объект?
C++
1
const char *Camera::positionStr[]
Может содержать несколько строк, поскольку-это указатель на указатель строк(массива символов).

Добавлено через 34 минуты 2 секунды
Цитата Сообщение от Skirmisher Посмотреть сообщение
C++
1
const char *Camera::positionStr[]
Может содержать несколько строк, поскольку-это указатель на указатель строк(массива символов).
Все проблему я решил всем кто участвовал в обсуждении этого топика спасибо.
1
Monte-Cristo
2790 / 1376 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
01.08.2009, 15:30 #23
Цитата Сообщение от Skirmisher Посмотреть сообщение
ожет содержать несколько строк, поскольку-это указатель на указатель строк(массива символов).
сорри.. видишь ли, я сейчас с 3g интернета... и браузер загрузил не всю строку.. она у меня была:
C++
1
static const char* positionSt
0
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
11.01.2011, 17:16 #24
тут ранее была фраза, что "к свойствам с доступом protected имеют доступ классы наследники..".
наверное, глупый вопрос, но все таки. а сам объект имеет доступ к свойствам и методам с доступом protected?

и есть ли общепринятые термины : потомок - предок или следует писать родитель - наследник?
0
silent_1991
Эксперт С++
4989 / 3046 / 149
Регистрация: 11.11.2009
Сообщений: 7,028
Завершенные тесты: 1
11.01.2011, 17:29 #25
no0ker, а вы сами как думаете, зачем в объекте содержать данные, к которым сам этот объект обратиться не может? о_О Не легче их уж сразу в наследнике объявить.
Ладно, ответом на вопрос будет "Разумеется, имеет".

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

Не по теме:

А вообще, зачем такие вопросы задавать, неужели трудно самому проверить?

0
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
11.01.2011, 17:32 #26
=)
знаете, когда я писал это сообщение, я уже проверил это.
просто везде акцентируется, что к protected имеют доступ потомки, потомки и потомки.


например в intuit.ru c++ А.Л.Фридман
дословно
"Назначение защищенной (protected) части класса в том и состоит, чтобы, закрыв доступ "извне" к определенным атрибутам и методам, разрешить пользоваться ими производным классам."
0
11.01.2011, 17:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2011, 17:32
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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