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

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

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

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

13.07.2013, 01:07. Просмотров 1167. Ответов 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) потом методом класса В должен запустить открытый метод класса А. но печатает фигню!
что здесь не правильно?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
13056 / 7319 / 816
Регистрация: 27.09.2012
Сообщений: 18,055
Записей в блоге: 3
Завершенные тесты: 1
13.07.2013, 02:33     Доступ к закрытым членам базового класса #16
Цитата Сообщение от zybrzybr Посмотреть сообщение
откуда появился доступ к PrA1 в конструкторе?
В каком и где он появился?
Цитата Сообщение от zybrzybr Посмотреть сообщение
2) и почему уже доступ появился к закрытому методу?
где? когда?
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
Модератор
Эксперт CЭксперт С++
13056 / 7319 / 816
Регистрация: 27.09.2012
Сообщений: 18,055
Записей в блоге: 3
Завершенные тесты: 1
13.07.2013, 02:38     Доступ к закрытым членам базового класса #18
Цитата Сообщение от zybrzybr Посмотреть сообщение
приват ничего не скрывает, если обьявит ьбазовый конструктор в конструкторе?
что это значит?
Цитата Сообщение от zybrzybr Посмотреть сообщение
private A
это для тех, кто захочет обратиться снаружи к членам класса, через производный класс
zybrzybr
17 / 16 / 0
Регистрация: 29.09.2010
Сообщений: 156
13.07.2013, 02:42  [ТС]     Доступ к закрытым членам базового класса #19
Цитата Сообщение от Croessmah Посмотреть сообщение
что это значит?
C++
1
B(): A(), PrB1(3)
Цитата Сообщение от Croessmah Посмотреть сообщение
это для тех, кто захочет обратиться снаружи к членам класса, через производный класс
но сам класс тоже не имеет доступа к базовому , ну так написано в книге...
должен скрывать в производном все от базового. хотя конечно что он вообще тогда от него анследовал? )
Croessmah
Модератор
Эксперт CЭксперт С++
13056 / 7319 / 816
Регистрация: 27.09.2012
Сообщений: 18,055
Записей в блоге: 3
Завершенные тесты: 1
13.07.2013, 02:47     Доступ к закрытым членам базового класса #20
Цитата Сообщение от zybrzybr Посмотреть сообщение
но сам класс тоже не имеет доступа к базовому
К public и protected членам имеет
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2013, 02:55     Доступ к закрытым членам базового класса
Еще ссылки по теме:
Доступ к членам одного класса с другого C++
C++ Как получить доступ к членам класса из функций
C++ Доступ к членам класса класса
C++ Доступ к параметрам и функциям базового класса
Доступ к переменным базового класса при наследовании C++

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

Или воспользуйтесь поиском по форуму:
zybrzybr
17 / 16 / 0
Регистрация: 29.09.2010
Сообщений: 156
13.07.2013, 02:55  [ТС]     Доступ к закрытым членам базового класса #21
вы знаите, я просто не так понял, извините за это мучения))))
вот пример придумал который сразу все поставил на свои места:

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 A
{
public:
    int PuA1;
    A() : PuA1(2) {;}
};
 
class B: private A
{
public:
    int get_pua1() {return PuA1;}
};
 
int main()
{
    B Ob1;
    cout << Ob1.get_pua1()<<endl;
    cin.get();
    return 0;
}
я понял, что
C++
1
class B: private A
просто все наследуемые свойства (данные и методы) переносит в раздел приват.
т.е. сам класс наследник имеет доступ ко всему базовому классу (public и protected), только как к приватным данным...

спасибо большое за помощь!)
Yandex
Объявления
13.07.2013, 02:55     Доступ к закрытым членам базового класса
Ответ Создать тему
Опции темы

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