Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
1

Protected в классах

03.06.2015, 09:57. Показов 2707. Ответов 32
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
using namespace std;
 
class TPoint{
    protected:
        int x,y;
        TPoint *t;
    public:
 
};
 
class TCircle:public TPoint{
    protected:
        int radius;
    public:
        TCircle(TPoint T, int Radius){t->x=200;};
        void GetData();
};
 
//////////////////////////
int main(){}
Думал, что если происходит наследование, то то, что в родительском классе объявлено внутри protected будет доступно наследнику.
Но получил ошибку error: 'int TPoint::x' is protected|

Чего-то я не допонял. Нужно разъяснение и пример как такое делают.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.06.2015, 09:57
Ответы с готовыми решениями:

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

Определить, какие из этих имен встречаются во всех классах, какие есть хотя бы в двух классах, и какие - только в одном классе
Для каждого из четырех классов указаны имена девочек, обучающихся в них. Определить, какие из этих...

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

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

32
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
03.06.2015, 12:07  [ТС] 21
Author24 — интернет-сервис помощи студентам
Tulosba, И смысл был в том, что в скобочки записал и получил результат. Приватные данные тут не подходят.
Или пример давай рабочий без геттеров, сеттеров, а чисто на конструкторах с приват. без протектед и не в паблик.

Добавлено через 26 секунд
Цитата Сообщение от castaway Посмотреть сообщение
Это к чему сказано?
к этому
Цитата Сообщение от Tulosba Посмотреть сообщение
(из былдера подсмотрел что ли?) - это моветон.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
03.06.2015, 12:24 22
Цитата Сообщение от daslex Посмотреть сообщение
Т - это префикс обозначающий тип
Есть более удачный стиль именования: имя любого пользовательского типа задается с большой буквы (без лишних T). Рекомендую для ознакомления google-code-style например.
Цитата Сообщение от daslex Посмотреть сообщение
Круг не является точкой,
Вот уже по этому наследование не следует делать публичным. Публичное наследование подразумевает возможность замены экземпляра базового класса экземпляром производного. См. Принцип подстановки Лисков. Правильнее использовать приватное наследование, а ещё лучше агрегирование (включение в качестве члена) в данной ситуации.

Добавлено через 2 минуты
Цитата Сообщение от daslex Посмотреть сообщение
И смысл был в том, что в скобочки записал и получил результат.
Не очень понял. Поясни, плиз, этот момент.
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
03.06.2015, 12:32  [ТС] 23
ОК. насчет именования большого смысла спорить нет. Сам спор бессмысленен. Если бы я работал, я бы безусловно исполнял требования именования, которые предъявляет работодатель(заказчик). В учебных целях все что понятно и не затрудняет чтения вполне себе подходит.
_______________
С наследованием как private в этом примере не принципиально, я согласен, что само наследование надо private,
но существующие в примере внутри класса неконстантные данные как private не сделать. Хотелось бы, да не получится. (если только конструкторы)

Добавлено через 1 минуту
Цитата Сообщение от Tulosba Посмотреть сообщение
смысл был в том, что в скобочки записал и получил результат.
Ваш вариант это условие выполняет.
___________
Но не решает поставленную мною мне задачу решить это только на конструкторах. Вот и все.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
03.06.2015, 12:39 24
Цитата Сообщение от daslex Посмотреть сообщение
ОК. насчет именования большого смысла спорить нет. Сам спор бессмысленен.
ну просто ряд людей уже увидели твоё TName и их перекосило, потому что на работе ни у кого нету такого у них. Так как никто не поддержал такое именнование - возможно на форуме нету ниодного работающего на фирме с таким неймингов типов?)
0
daslex
03.06.2015, 12:41  [ТС]
  #25

Не по теме:

На форуме есть. В ветке cpp-beginners может и нету.

0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
03.06.2015, 12:43 26
Цитата Сообщение от daslex Посмотреть сообщение
не решает поставленную мною мне задачу решить это только на конструкторах.
Без использования функций не являющихся конструкторами? Так это можно исправить. Убираем геттеры, и добавляем копи-конструктор:
Кликните здесь для просмотра всего текста
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
26
27
28
#include <iostream>
 
using namespace std;
 
class Point
{
private:
    int x_;
    int y_;
public:
    Point(int x, int y): x_(x), y_(y) {}
    Point(const Point& p) : x_(p.x_), y_(p.y_) {}
};
 
class Circle: private Point
{
private:
    int r_;
public:
    Circle(int r, const Point& p = Point(10,10) ) : Point(p), r_(r) {}
};
 
int main()
{
   Point pt(100,300);  //X=100,Y=300
   Circle c1(789, pt); //Х=100, Y=300, R=789
   Circle c2(987); //Х=10, Y=10, R=997
}
1
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
03.06.2015, 12:51  [ТС] 27

Не по теме:

Паскаль-Delphi-Cpp Нечего удивляться такому именованию, с Паскаля ноги растут :scratch:



Добавлено через 5 минут
Tulosba, А убедиться-то как, что в X и Y те X и Y
без протектед, если метод Show только у Circle


Добавлено через 2 минуты
без отладчиков'
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
03.06.2015, 12:55 28
Цитата Сообщение от daslex Посмотреть сообщение
если метод Show только у Circle
Значит он должен делегировать вызов в Point.Show() для "точечной" составляющей круга.
C++
1
2
3
4
5
void Circle::Show() const
{
    Point::Show(); // точечная часть
    // специфическая для круга часть
}
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
03.06.2015, 13:00  [ТС] 29
Цитата Сообщение от Tulosba Посмотреть сообщение
Point::Show(); // точечная часть
Не понял
Вот Код, который должен показать Х,Y и радиус
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
26
27
28
29
30
31
32
33
34
#include <iostream>
 
using namespace std;
 
class Point
{
private:
    int x_;
    int y_;
public:
    Point(int x, int y): x_(x), y_(y) {}
    Point(const Point& p) : x_(p.x_), y_(p.y_) {}
};
 
class Circle: private Point
{
private:
    int r_;
public:
    Circle(int r, const Point& p = Point(10,10) ) : Point(p), r_(r) {}
    void Show(){  //Только у Circle
        Point::Show();  //То о чем сказано выше, как я понял
                             //Должно сработать cout<<this->x<<"  "<<this->y<<"  "<<this->R<<"\n";
    }
};
 
int main()
{
   Point pt(100,300);  //X=100,Y=300
   Circle c1(789, pt); //Х=100, Y=300, R=789
   Circle c2(987); //Х=10, Y=10, R=997
 
   с1.Show();
}
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
03.06.2015, 13:05 30
Цитата Сообщение от daslex Посмотреть сообщение
Не понял
Тип Point должен содержать свой метод Show(). И этот метод можно вызвать из Circle::Show() как я показал ранее. Если метода доступа к приватным данным Point (x,y) не будет, то и легального способа отобразить эти данные, конечно же, тоже не будет. Я думаю, это очевидно.
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
03.06.2015, 13:09  [ТС] 31
Цитата Сообщение от Tulosba Посмотреть сообщение
Тип Point должен содержать свой метод Show()
Цитата Сообщение от daslex Посмотреть сообщение
без протектед, если метод Show только у Circle
оговорено было.

Добавлено через 1 минуту
он для того и нужен этот protected.
0
Tulosba
03.06.2015, 14:03
  #32

Не по теме:

Цитата Сообщение от daslex Посмотреть сообщение
он для того и нужен этот protected.
Если весь твой эксперимент исключительно для ознакомления с языковыми конструкциями, то пожалуйста. Но в промышленном коде введение искусственных ограничений и решение задачи через одно место не приемлемо.

0
daslex
03.06.2015, 14:13  [ТС]     Protected в классах
  #33

Не по теме:

Не похоже, что мне удастся поработать программистом. Так что боятся нечего. :friends:

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.06.2015, 14:13

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

Доступ внука к Protected
Здравствуйте, сегодня встал перед такой проблемой. Дело в том, что создал класс, наследующий...

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

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


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

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru