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

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

Войти
Регистрация
Восстановить пароль
 
ByAdD
20 / 3 / 0
Регистрация: 08.05.2011
Сообщений: 195
#1

Обращение к закрытому полю - C++

16.05.2012, 15:30. Просмотров 1024. Ответов 6
Метки нет (Все метки)

Имееться некий Основной класс с закрытыми полями
C++
1
2
3
4
class C {
    private:   string Name;
       int Nomer;
};
И имееться второй класс который имеет сывои поля и наследует поля класса С
C++
1
2
3
class N : private C{
      int seria;
        };
Как обратиться к полям класса N, к своим и тем что унаследованны из основной программы ?
C++
1
2
3
4
int main 
{
?
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2012, 15:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обращение к закрытому полю (C++):

Доступ к закрытому полю - C++
Привет) есть абстрактный класс class Transport { protected: string name; int maxSpeed; int yearOfManufacture; ...

Определение класса leverage и метода для доступа к закрытому полю - C++
Напишите определение класса leverage, включающего одно закрытое поле типа int с именем crowbar. Напишите метод getcrow() для класса...

Обращение к private полю в лямбде - C++
Добрый день, почему лямбда имеет доступ к private полю класса через его константный указатель? #include <iostream> class Foo...

Обращение к приватному полю класса - C++
class CMessage { char *pmessage; public: void ShowIt() { cout<<endl<<pmessage<<endl; }

Обращение к полю элемента std::vector'a - C++
Здравстуйте! :) Несильно знаком с STL пока, возникла проблемка. Есть класс: class DataBase { public: char Surname; int...

Не хватает прав доступа к закрытому члену класса из дружественной функции - C++
Здравтсвуйте. Есть класс LifeMap. файл LifeMap.hpp #ifndef LIFEMAP_HPP #define LIFEMAP_HPP /* * LifeMap - класс для...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
16.05.2012, 15:32 #2
ByAdD, Напрямую никак. Только если написать функции, которые возвращают нужные значения.
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
16.05.2012, 16:00 #3
Если в С есть публичная шаблонная функция, то можно этот класс "взломать".

Например
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>
 
class C
{
private:
    int a, b;
    
public:
    C() : a(1), b(2) {}
    
    template < class T >
    void foo(const T& t)
    {
        //...
    }
};
 
namespace
{
    struct temp {};
}
 
int A, B;
 
template <>
void C::foo< temp > (const temp& t) 
{
    A = this->a;
    B = this->b;
}
 
int main()
{
    C c;
    c.foo( temp() );
    
    std::cout << A << ' ' << B << std::endl;
}
Результат: http://liveworkspace.org/code/3b4fa7...13a8dae3681e81
Правда, так делать нехорошо, да и реализовать покрасивее можно.
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
16.05.2012, 16:00 #4
diagon, Интересно. Можно пример? Не совсем понял о чем вы говорите. Знаю, что ломануть можно так.
Понято.

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
#include <iostream>
 
class Cl
{
public:
   Cl():value(0), value2(0)
   {
   }
   int get_first() const { return value; }
   int get_second() const { return value2; }
private:
   int value;
   int value2;
};
 
int main()
{
   Cl c;
   std::cout << *(int*)&c << " " << *((int*)&c + 1) << std::endl;
   *(int*)&c = 1;
   *((int*)&c + 1) = 2;
   std::cout << *(int*)&c << " " << *((int*)&c + 1) << std::endl;
   std::cout << c.get_first() << " " << c.get_second() << std::endl;
}
http://liveworkspace.org/code/2fd673...29c321fe7bb0fd
0
ByAdD
20 / 3 / 0
Регистрация: 08.05.2011
Сообщений: 195
16.05.2012, 16:09  [ТС] #5
ForEveR а как через функцию можно обратиться тогда?
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,927
16.05.2012, 16:09 #6
Для доступа к собственным полям можно либо делать данные public (по умолчанию они стоят private), но спрашивается, зачем тогда придумана инкапсуляция. А вобще, полям просто нужно прописать методы для работы с ними. Например вот так:
C++
1
2
3
4
5
6
7
class N : private C
{
    int seria;
    public:
       int getSeria() {return seria; } 
       void setSeria(int x) {seria = x; }
};
Для доступа к элементам базового класса можно: опять же, объявить свойства типа public, либо описать методы и сделать наследование типа public, либо написать в производном классе свои методы, которые вызывали бы методы базового класса (при private-наследовании, все члены (в т.ч. и функции-члены) класса в производном имеют спецификатор private. С private членами работают только методы этого же класса.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class C {
    private:   std::string Name;
       int Nomer;
      public:
       int getNomer() {return Nomer; } 
       void setNomer(int x) {Nomer = x; } 
};
 
class N : private C
{
    int seria;
    public:
       int getSeria() {return getNomer(); } 
       void setSeria(int x) {setNomer(x); }
        };
       
int main()  
{
    N n;
    n.setSeria(5);
    std::cout<< n.getSeria(); 
    return 0;
}
А вот насчет взлома - не слышал)
1
ByAdD
20 / 3 / 0
Регистрация: 08.05.2011
Сообщений: 195
16.05.2012, 16:12  [ТС] #7
MrGluck спс , вроде то что нужно , шас опробую
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2012, 16:12
Привет! Вот еще темы с ответами:

Сортировка структур по полю - C++
Здравствуйте всем! Я здесь новичок. Учусь на программиста на 1 курсе, скажу прямо мне очень тяжело.:cry:Мне нужно до 15 мая сдать курсовую,...

Сортировка структуры по полю - C++
Есть структура типа СТУДЕНТ с полями: *фио *группа *массив из пяти чисел (оценки) Необходимо отсортировать структуру по возрастанию...

Ошибка доступа к полю - C++
#include &lt;iostream&gt; using namespace std; int i = 0; class CDate { protected: int Year; int Month;

Сортировка по любому полю - C++
Обработать массив структур следующим образом: п.1) ввести элементы массива с клавиатуры(текущее количество эле- ментов...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.05.2012, 16:12
Ответ Создать тему
Опции темы

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