Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/47: Рейтинг темы: голосов - 47, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 24.06.2017
Сообщений: 2

Закрытые поля класса

24.06.2017, 11:55. Показов 9111. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.Помогите разобраться с кодом. Определен следующий класс:
C++
1
2
3
4
5
6
7
struct Cls {
    Cls(char c, double d, int i);
private:
    char c;
    double d;
    int i;
};
Как видно, все поля этого класса закрытые, нужно реализовать несколько функций, которые дают полный доступ к этим полям

Вот эти функции:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
char &get_c(Cls &cls) 
{
    return *(char*)(&cls);
}
 
double &get_d(Cls &cls)
{
    return *(double*)((char*)(&cls) + 8);
}
 
int &get_i(Cls &cls) 
{
    return *(int*)((char*)(&cls) + 16);
}
Объясните, пожалуйста, работу всех 3-х функций.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.06.2017, 11:55
Ответы с готовыми решениями:

Закрытые поля структуры.
Существуют ли закрытые поля структуры? Если да, то как их описывать? Добавлено через 39 минут 26 секунд Ну что никто не может...

Открытые члены класса переделать в закрытые
#include "stdafx.h" #include <iostream> #include <string> using namespace std; float sum=0.0; int *s; int *z; string sotr; float...

Дружественный оператор не видит закрытые члены класса
angle.h: #pragma once #include <iostream> using std::ostream; class Angle { friend ostream& operator<<(ostream& out, Angle...

8
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
24.06.2017, 12:33
Цитата Сообщение от Sentimental Посмотреть сообщение
Объясните, пожалуйста, работу всех 3-х функций.
Основная их цель показать низкий уровень интеллекта у автора строчек кода, и подчеркнуть, что он царь горы среди тупых программистов)
0
0 / 0 / 0
Регистрация: 24.06.2017
Сообщений: 1
24.06.2017, 13:01
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Основная их цель показать низкий уровень интеллекта у автора строчек кода, и подчеркнуть, что он царь горы среди тупых программистов)
А как бы Вы реализовали данную задачу?
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
24.06.2017, 15:51
Цитата Сообщение от Sentiental Посмотреть сообщение
А как бы Вы реализовали данную задачу?
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
45
46
47
48
49
50
51
52
53
54
55
56
#include <iostream>
 
class Cls
{
private:
    char m_c;
    double m_d;
    int m_i;
 
public:
    Cls( const char ch, const double d, const int i )
        : m_c(ch)
        , m_d(d)
        , m_i(i)
    {
    }
 
    void setChar( const char ch )
    {
        m_c = ch;
    }
    void setDouble( const double d )
    {
        m_d = d;
    }
    void setInteger( const int i )
    {
        m_i = i;
    }
 
    char getChar() const
    {
        return m_c;
    }
 
    double getDouble() const
    {
        return m_d;
    }
 
    int getInteger() const
    {
        return m_i;
    }
};
 
int main( )
{
    Cls foo( 'f', 3.14, 100 );
    std::cout << foo.getChar() << " " << foo.getDouble() << " " << foo.getInteger() << " " << std::endl;
    foo.setChar( 'y' );
    foo.setInteger( 88 );
    std::cout << foo.getChar() << " " << foo.getDouble() << " " << foo.getInteger() << " " << std::endl;
 
    return 0;
}
0
0 / 0 / 0
Регистрация: 24.06.2017
Сообщений: 2
24.06.2017, 18:05
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
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
45
46
47
48
49
50
51
52
53
54
55
56
#include <iostream>
 
class Cls
{
private:
    char m_c;
    double m_d;
    int m_i;
 
public:
    Cls( const char ch, const double d, const int i )
        : m_c(ch)
        , m_d(d)
        , m_i(i)
    {
    }
 
    void setChar( const char ch )
    {
        m_c = ch;
    }
    void setDouble( const double d )
    {
        m_d = d;
    }
    void setInteger( const int i )
    {
        m_i = i;
    }
 
    char getChar() const
    {
        return m_c;
    }
 
    double getDouble() const
    {
        return m_d;
    }
 
    int getInteger() const
    {
        return m_i;
    }
};
 
int main( )
{
    Cls foo( 'f', 3.14, 100 );
    std::cout << foo.getChar() << " " << foo.getDouble() << " " << foo.getInteger() << " " << std::endl;
    foo.setChar( 'y' );
    foo.setInteger( 88 );
    std::cout << foo.getChar() << " " << foo.getDouble() << " " << foo.getInteger() << " " << std::endl;
 
    return 0;
}
Суть задания состояла в том, чтобы получить доступ к закрытым полям класса не используя методы этого класса! А то, как написали Вы - само собой разумеющееся.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
24.06.2017, 18:32
Цитата Сообщение от Sentimentol Посмотреть сообщение
Суть задания состояла в том, чтобы получить доступ к закрытым полям класса не используя методы этого класса!
Будете ставить знаки восклицания у себя дома на холодильнике маркером, а тут будьте спокойнее. В первом посте не слова об этом нету. Получить легальный доступ к закрытым полям без методов, можно только через указатели и ссылки на закрытые поля. Еще есть трюк с шаблонами, но не помню его легальность
0
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
24.06.2017, 18:35
вы не можете получить приватные поля,или как вам выше rikimaru2013написал, если вам преподаватель дал задание это для того что бы вы почитали много литературы
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
24.06.2017, 18:41
Цитата Сообщение от Sentimentol Посмотреть сообщение
получить доступ к закрытым полям класса не используя методы этого класса
значит определи в этом классе функции-друзей и через них получай доступ к полям.
че за идиотская задача?
1
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
24.06.2017, 18:43
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
че за идиотская задача?
проверка препода на сколько они выучили тему (предполагаю)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.06.2017, 18:43
Помогаю со студенческими работами здесь

Конструктор внутри класса, поля которого являются членами другого класса
Вот фрагмент кода. class Class_Figure { Class_Triangle tr1; Class_Circle cr1; public: Class_Figure() { } void...

Использование в качестве поля класса указатель на объект другого класса
Ошибка в названии - &quot;указателЯ&quot; Вот, пытаюсь освоить ООП (пока только учусь): создаю класс person (человек) и car (модель машины). ...

Друзья, подскажите, говорят, что можно поля класса инициализировать в момент объявления класса. Как это сделать?
Скажу сразу, а то сейчас начнется, что я прекрасно понимаю, что поля класса при объявлении инициализировать нельзя. Можно конструктором при...

Закрытые поля класса или аргументы метода?
Что сейчас наиболее подходит для C#5 и в каких случаях - передавать в метод аргументы или считывать необходимые методу данные из полей...

Использование свойств для чтения и записи данных в закрытые поля класса
Добрый день ! Как я понял свойства используют для чтения и записи данных в закрытые поля класса через какую-ту левую переменную как...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Ниже машинный перевод статьи The Thinkpad X220 Tablet is the best budget school laptop period . Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы,. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru