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

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

Войти
Регистрация
Восстановить пароль
 
 
zybrzybr
18 / 17 / 0
Регистрация: 29.09.2010
Сообщений: 156
#1

Доступ к закрытым членам базового класса - C++

13.07.2013, 01:07. Просмотров 1365. Ответов 20
Метки нет (Все метки)

помогите понять что я не так сделал ?

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
35
36
37
38
39
40
41
42
43
44
#include <iostream>
 
using namespace std;
class A
{
    int PrA1;
public:
    int PuA1;
    int get_PrA ()
    {
        return PrA1;
    }
    A() : PrA1(1)
    {
        PuA1 = 11;
    }
};
 
class B: private A {
    int PrB1;
public:
    int PuB1;
    int A:: PuA1;
    int get_PrA1()
    {
        return А::get_PrA();
    }
    B() : PrB1(3)
    {
        PuB1 = PuA1;
    }
};
 
 
int main()
{
    B Ob1;
    cout << Ob1.get_PrA1() << endl;
    cout << Ob1.PuA1 << endl;
    cout << Ob1.PuB1 << endl;
    int i;
    cin >> i;
    return 0;
}
я так понялЖ
1) создавая обьект класса В вызывается первым конструктор базового класса. в конструкторе инициализируются переменные
C++
1
PrA1(1)
PrA1 принимает 1.

2) потом методом класса В должен запустить открытый метод класса А. но печатает фигню!
что здесь не правильно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2013, 01:07
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Доступ к закрытым членам базового класса (C++):

Доступ к закрытым членам класса(шаблона) - C++
Вопрос почему компилятор выдает ошибку в функции main? Ситуация следующая имеется шаблон (класс) элемента списка, реализован шаблон (класс)...

Перегрузка операторов и доступ к закрытым членам - C++
Поясните, пожалуйста, почему, когда при перегрузке операторов, елис как аргумент передается ссылка на обьект класса, то через эту ссылку мы...

Доступ к закрытым элементам класса - Вопрос - C++
Доброго всем времени суток. Итак, столкнулся с одной непонятной вещью, связанной с классами, а точнее с private элементами. Вот код: ...

Доступ к членам класса - C++
Объект класса не может получить доступ к своим переменным?

Доступ к членам класса - C++
Есть два класса: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; class CPerson { /*закрытые члены*/ private:...

Доступ к private членам класса - C++
Почему при таком объявлении не работает оператор вывода, по идее он же объявлен как друг класса и должен иметь доступ к членам этого...

20
ovner
7 / 7 / 0
Регистрация: 06.10.2012
Сообщений: 140
13.07.2013, 01:35 #2
возможно надо написать:
C++
1
class B: public A {
а не
C++
1
class B: private A {
0
zybrzybr
18 / 17 / 0
Регистрация: 29.09.2010
Сообщений: 156
13.07.2013, 01:39  [ТС] #3
если обьявит ьбазовый как публик, то , как я понял, должны стать доступны открытые базовые, а закрытые все равно остаються закрытыми. я просто вот думаю, что если доступ к закрытым осуществляеться через методы, то если разрешить ОТКРЫТЫЙ базовый метод (кторый возвращает закрытый базовый элемент), то можно получить доступ к закрытым данным в базовом)

т.е. задача получить доступ к закрытым данным в базовом классе.
0
ovner
7 / 7 / 0
Регистрация: 06.10.2012
Сообщений: 140
13.07.2013, 01:41 #4
Цитата Сообщение от zybrzybr Посмотреть сообщение
если обьявит ьбазовый как публик, то , как я понял, должны стать доступны открытые базовые, а закрытые все равно остаються закрытыми. я просто вот думаю, что если доступ к закрытым осуществляеться через методы, то если разрешить ОТКРЫТЫЙ базовый метод (кторый возвращает закрытый базовый элемент), то можно получить доступ к закрытым данным в базовом)

т.е. задача получить доступ к закрытым данным в базовом классе.
тогда в классе А лучше использовать protected а не private, и будет доступ без проблем
0
Croessmah
Ушел
13783 / 8033 / 928
Регистрация: 27.09.2012
Сообщений: 19,804
Записей в блоге: 3
Завершенные тесты: 1
13.07.2013, 01:41 #5
А так?
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
35
36
37
38
39
40
41
42
43
#include <iostream>
 
using namespace std;
class A
{
    int PrA1;
public:
    int PuA1;
    int get_PrA ()
    {
        return PrA1;
    }
    A() : PrA1(1)
    {
        PuA1 = 11;
    }
};
 
class B: public A {
    int PrB1;
public:
    int PuB1;
    int get_PrA1()
    {
        return A::get_PrA();
    }
    B() : PrB1(3)
    {
        PuB1 = PuA1;
    }
};
 
 
int main()
{
    B Ob1;
    cout << Ob1.get_PrA1() << endl;
    cout << Ob1.PuA1 << endl;
    cout << Ob1.PuB1 << endl;
    int i;
    cin >> i;
    return 0;
}
1
zybrzybr
18 / 17 / 0
Регистрация: 29.09.2010
Сообщений: 156
13.07.2013, 01:44  [ТС] #6
Цитата Сообщение от Croessmah Посмотреть сообщение
А так?
C++
1
2
3
4
5
6
#include <iostream>
class B: public A {
    int PrB1;
public:
    int PuB1;
}

так а что поменялось ? все одно выводит фигню.
я правильно понял , что при создании обьекта класса В первым вызываеться конструктор А , псле конструктор В ?
если да, то доолжно вывести 1
0
IGPIGP
13.07.2013, 01:45
  #7

Не по теме:

Чет я напутал или глюкнуло. Второй пост появился вместо исправления первого

1
Croessmah
Ушел
13783 / 8033 / 928
Регистрация: 27.09.2012
Сообщений: 19,804
Записей в блоге: 3
Завершенные тесты: 1
13.07.2013, 01:47 #8
Цитата Сообщение от zybrzybr Посмотреть сообщение
все одно выводит фигню.
замена private на public не всё что я изменил
http://ideone.com/c2GhXH

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

Не по теме:

IGPIGP, лучше поздно, чем никогда


Цитата Сообщение от zybrzybr Посмотреть сообщение
так а что поменялось ?
В посте IGPIGP видно

Не по теме:

уже не видно

2
zybrzybr
18 / 17 / 0
Регистрация: 29.09.2010
Сообщений: 156
13.07.2013, 01:47  [ТС] #9
а что происходит если обьявить в классе В пременную из класса А ?? почему так происходит?

а если обьявлять базовый закрытым, тополучаеться никак??
эту строку
C++
1
int A:: PuA1;
я написал потому что получил такую ошибку
CodeBlocks : «int A::PuA1» is inaccessible
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6968 / 3259 / 327
Регистрация: 04.12.2011
Сообщений: 9,024
Записей в блоге: 5
13.07.2013, 01:50 #10
Цитата Сообщение от zybrzybr Посмотреть сообщение
а что происходит если обьявить в классе В пременную из класса А ?? почему так происходит?
Двойное объявление это нельзя. Да и зачем, - пользуйтесь тем что уже есть.
Цитата Сообщение от Croessmah Посмотреть сообщение
В посте IGPIGP видно
Дык, как под копирку то что и у Вас.)
0
zybrzybr
18 / 17 / 0
Регистрация: 29.09.2010
Сообщений: 156
13.07.2013, 01:57  [ТС] #11
в книге сказано что если базовый обьявлен как закрытый то доступ можно получить к открытим путем разрешения области видимости. а к закрытым как ?) вот методы имют право на доступ к закрытым?
я вот что хотел сделать: в базовом обьявить открытый метод, разрешить его в производном и прочитать закрытый...

как это сделать?) подскажите пожалуйсто!
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6968 / 3259 / 327
Регистрация: 04.12.2011
Сообщений: 9,024
Записей в блоге: 5
13.07.2013, 02:08 #12
Ну вообще, что-нибудь весёлое можно всегда придумать:
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
35
36
37
38
#include <iostream>
using namespace std;
class A
{
private:
    int PrA1;
public:
    int PuA1;
    int get_PrA ()
    {
        return PrA1;
    }
    A() : PrA1(1)
    {
        PuA1 = 11;
    }
};
 
class B: private A {
    int PrB1;
public:
    int PuB1;
    int get_pra1(){return get_PrA ();}//аж вотаквот?
    
    B() 
:A(), PrB1(3)
    {
        PuB1 = PuA1;
    }
};
 
int main()
{
    B Ob1;
    cout << Ob1.get_pra1()<<endl;//
        cin.get();
    return 0;
}
0
zybrzybr
18 / 17 / 0
Регистрация: 29.09.2010
Сообщений: 156
13.07.2013, 02:12  [ТС] #13
Цитата Сообщение от IGPIGP Посмотреть сообщение
B()
:A(), PrB1(3)
а как это понять?
вызываеться конструктор А() в конструкторе В() или что это?)
уж извините, я недавно начал эту Си изучать)
а метод из класса А будет разве виден без разрешения? базовый класс оббьявлен как закрытый?

блин работает!! ))
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6968 / 3259 / 327
Регистрация: 04.12.2011
Сообщений: 9,024
Записей в блоге: 5
13.07.2013, 02:17 #14
Цитата Сообщение от zybrzybr Посмотреть сообщение
а как это понять?
вызываеться конструктор А() в конструкторе В() или что это?)
Да.
Цитата Сообщение от zybrzybr Посмотреть сообщение
а метод из класса А будет разве виден без разрешения? базовый класс оббьявлен как закрытый?
Скомпилируйте.
0
zybrzybr
18 / 17 / 0
Регистрация: 29.09.2010
Сообщений: 156
13.07.2013, 02:23  [ТС] #15
выходит то конструктор игнорирует доступ ?)
1) откуда появился доступ к PrA1 в конструкторе?
2) и почему уже доступ появился к закрытому методу? (закрутому наследственно)

Добавлено через 59 секунд
Цитата Сообщение от IGPIGP Посмотреть сообщение
Скомпилируйте.
блин, компилируется, но не поятно))))
0
13.07.2013, 02:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2013, 02:23
Привет! Вот еще темы с ответами:

Дружественная функция-оператор, доступ к закрытым полям класса - C++
У меня есть класс MyClass, вот код: class MyClass { int x, y; public: MyClass(); friend ostream &amp; operator &lt;&lt; (ostream &amp;,...

Доступ к членам одного класса с другого - C++
Есть три файла: A.cpp: #include &quot;B.cpp&quot; class AA { int A; public: AA(int a) { A = a;

Как получить доступ к членам класса из функций - C++
Есть код типа //***************************************************************************** func1() { body; } func2() ...

Доступ к членам класса класса - C++
Всем привет. Вобщем есть базовый класс, и два производных. Пользователь вводит координаты нужно проверить факт пересечения одной фигуры с...


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

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

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