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

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

Восстановить пароль Регистрация
 
 
zybrzybr
 Аватар для zybrzybr
17 / 16 / 0
Регистрация: 29.09.2010
Сообщений: 156
13.07.2013, 01:07     Доступ к закрытым членам базового класса #1
помогите понять что я не так сделал ?

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) потом методом класса В должен запустить открытый метод класса А. но печатает фигню!
что здесь не правильно?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2013, 01:07     Доступ к закрытым членам базового класса
Посмотрите здесь:

C++ Перегрузка операторов и доступ к закрытым членам
C++ Доступ к закрытым элементам класса - Вопрос
C++ Доступ к членам класса класса
доступ к private членам класса C++
Доступ к закрытым методом класса! C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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 {
zybrzybr
 Аватар для zybrzybr
17 / 16 / 0
Регистрация: 29.09.2010
Сообщений: 156
13.07.2013, 01:39  [ТС]     Доступ к закрытым членам базового класса #3
если обьявит ьбазовый как публик, то , как я понял, должны стать доступны открытые базовые, а закрытые все равно остаються закрытыми. я просто вот думаю, что если доступ к закрытым осуществляеться через методы, то если разрешить ОТКРЫТЫЙ базовый метод (кторый возвращает закрытый базовый элемент), то можно получить доступ к закрытым данным в базовом)

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

т.е. задача получить доступ к закрытым данным в базовом классе.
тогда в классе А лучше использовать protected а не private, и будет доступ без проблем
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 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;
}
zybrzybr
 Аватар для zybrzybr
17 / 16 / 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
IGPIGP
13.07.2013, 01:45
  #7

Не по теме:

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

Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
13.07.2013, 01:47     Доступ к закрытым членам базового класса #8
Цитата Сообщение от zybrzybr Посмотреть сообщение
все одно выводит фигню.
замена private на public не всё что я изменил
http://ideone.com/c2GhXH

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

Не по теме:

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


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

Не по теме:

уже не видно

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

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

как это сделать?) подскажите пожалуйсто!
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6176 / 2905 / 284
Регистрация: 04.12.2011
Сообщений: 7,730
Записей в блоге: 3
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;
}
zybrzybr
 Аватар для zybrzybr
17 / 16 / 0
Регистрация: 29.09.2010
Сообщений: 156
13.07.2013, 02:12  [ТС]     Доступ к закрытым членам базового класса #13
Цитата Сообщение от IGPIGP Посмотреть сообщение
B()
:A(), PrB1(3)
а как это понять?
вызываеться конструктор А() в конструкторе В() или что это?)
уж извините, я недавно начал эту Си изучать)
а метод из класса А будет разве виден без разрешения? базовый класс оббьявлен как закрытый?

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

Добавлено через 59 секунд
Цитата Сообщение от IGPIGP Посмотреть сообщение
Скомпилируйте.
блин, компилируется, но не поятно))))
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
13.07.2013, 02:33     Доступ к закрытым членам базового класса #16
Цитата Сообщение от zybrzybr Посмотреть сообщение
откуда появился доступ к PrA1 в конструкторе?
В каком и где он появился?
Цитата Сообщение от zybrzybr Посмотреть сообщение
2) и почему уже доступ появился к закрытому методу?
где? когда?
zybrzybr
 Аватар для zybrzybr
17 / 16 / 0
Регистрация: 29.09.2010
Сообщений: 156
13.07.2013, 02:36  [ТС]     Доступ к закрытым членам базового класса #17
сделал вот так вот :

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
#include <iostream>
using namespace std;
class A
{
private:
    int PrA1;
public:
 [B]   int PuA1;[/B]
    int get_PrA ()
    {
        return PrA1;
    }
    A() : PrA1(1), PuA1(2) {;}
};
 
class B: private A {
    int PrB1;
public:
    int PuB1;
    int get_pra1(){return get_PrA ();}
////////////////////////////////////////////////
    int get_pua1() {return PuA1;}          ///
////////////////////////////////////////////////
    B(): A(), PrB1(3)
    {
        PuB1 = PuA1;
    }
};
 
int main()
{
    B Ob1;
    cout << Ob1.get_pra1()<<endl;//
    cout << Ob1.get_pua1()<<endl;
        cin.get();
    return 0;
}
и получилось что этот приват ничего не скрывает, если обьявит ьбазовый конструктор в конструкторе?
т.е. получаем полный доступ к без разрешения к открытым базовым, а через открытые методы и к закрытым базового ?
я правильно понял что это что то вроде глобального разрешения, игнорирующее слово class B: private A { при обьявлении ?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
13.07.2013, 02:38     Доступ к закрытым членам базового класса #18
Цитата Сообщение от zybrzybr Посмотреть сообщение
приват ничего не скрывает, если обьявит ьбазовый конструктор в конструкторе?
что это значит?
Цитата Сообщение от zybrzybr Посмотреть сообщение
private A
это для тех, кто захочет обратиться снаружи к членам класса, через производный класс
zybrzybr
 Аватар для zybrzybr
17 / 16 / 0
Регистрация: 29.09.2010
Сообщений: 156
13.07.2013, 02:42  [ТС]     Доступ к закрытым членам базового класса #19
Цитата Сообщение от Croessmah Посмотреть сообщение
что это значит?
C++
1
B(): A(), PrB1(3)
Цитата Сообщение от Croessmah Посмотреть сообщение
это для тех, кто захочет обратиться снаружи к членам класса, через производный класс
но сам класс тоже не имеет доступа к базовому , ну так написано в книге...
должен скрывать в производном все от базового. хотя конечно что он вообще тогда от него анследовал? )
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2013, 02:47     Доступ к закрытым членам базового класса
Еще ссылки по теме:

Дружественная функция-оператор, доступ к закрытым полям класса C++
C++ Как получить доступ к членам класса из функций
Доступ к членам класса C++

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
13.07.2013, 02:47     Доступ к закрытым членам базового класса #20
Цитата Сообщение от zybrzybr Посмотреть сообщение
но сам класс тоже не имеет доступа к базовому
К public и protected членам имеет
Yandex
Объявления
13.07.2013, 02:47     Доступ к закрытым членам базового класса
Ответ Создать тему
Опции темы

Текущее время: 08:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru