Навигация
 
Главная
Для начинающих
Паскаль/Pascal
Bash

Визуальное программирование
• Visual Basic
• Delphi/Делфи
• C++/Си++/Си
• документация
• Компоненты

WEB программирование
• MySQL/мускул
• Web-дизайн
•• Шрифты
• PHP/Пхп
• Документация PHP
• JavaScript
•• библиотека jquery
•  Документация
Прочее

 
 
Поиск по сайту
 




 
 
О нас
  У нас Вы можете скачать исходники, скачать скрипты, найти исходники, исходники delphi, документация по JQeury, исходники си, учебник HTML  
 
Теги
  codeserfercom, nbspnbsp, Private, Visual, Возможность, Пример, Рассмотрим, Сегодня, Теперь, будет, данных, значение, который, может, можно, написать, например, очень, переменной, переменных, пользователя, помощью, программа, программирования, программы, просто, работы, разработки, решил, сделать, скрипт, строки, строку, также, только, функции, число, этого, языка, языков

Показать все теги
 
 
Счетчики
 
 
 
Реклама
   
 
Лучшие коды
   
   
 
C++ как я обошел private и protected
 Категория: Визуальное программирование » C | автор: Artem Kulyabin | 7 декабря 2009 | Просмотров: 4230  



 
Изучая язык программирования C++, я открыл для себя интересную вещь, которая заключается в том, что классы в C++ - ничто иное как поименованная область действия которая включает в себя множество объявлений(определений) функций(методов), некоторые метаданные, и две структуры, первая из которых определяет статические поля класса(далее "структура класса"), а вторая объявляет поля объекта данного класса(далее "структура объекта")..... Таким образом, получив указатели на эти структуры(в случае "структура класса" необходимо хотя бы 1 статическое поле с ключом доступа public), становится возможной модификация полей защищенных ключами доступа private и protected.

Примеры:

#include <iostream>

using namespace std;

/*--Пример №1:--*/

class myclass // подопытный зверек
{
public:
    int pub;
private:
    int priv;
public:
    void print_priv()
    {
        cout << priv << endl;
    }
} myobj;

/*
* внутренности "структуры объекта" myobj будут чем то типа:
*
* struct {
*     int pub;
*  int priv;
* } myobj;
*
*/

int main1()
{
    int*buf = &myobj.pub;// кладем в buf адрес myobj.pub

    buf++;// переходим на sizeof int байт, теперь buf указывает на myobj.priv

    *buf = 1;// извлекаем из buf адрес myobj.priv, и записываем константу

    myobj.print_priv();// печатаем защищенное поле объекта

    return 0;
}

/*--Пример №2:--*/

class myclass2
{
private:
    int priv;
public:
    void print_priv()
    {
        cout << priv << endl;
    }
} myobj2;

int main2()
{
    int*buf;

    buf = (int*) &myobj2;

    *buf = 2;// модифицируем myobj2.priv

    myobj2.print_priv();

    return 0;
}

/*--Пример №3:--*/

class myclass3
{
private:
    static int priv;
public:
    static int pub;

    static void print_priv()
    {
        cout << myclass3::priv << endl;
    }
};

int myclass3::priv;
int myclass3::pub;

int main3()
{
    int*buf;

    buf = &myclass3::pub;

    buf--;// модифицируем myclass3::priv

    *buf = 3;

    myclass3::print_priv();

    return 0;
}

int main()
{
    main1();
    main2();
    main3();
    return 0;
}
 
 

Что-то не получается? Не понятна какая-то часть кода? Напишите комментарий об этом и мы обязательно Вам все объясним!
Обязательно напишите отзыв о программе / учебнике. Для выражения благодарностей есть кнопка:


Сказали спасибо: Codeserfer
 
  Просьбы перезалить в комментариях принимаются
 
 (голосов: 6)
 
 
 
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
 
  Другие коды по теме:  
 
  • Определяем расширение экрана с помощью WinAPI
  • Нахождение всех совершенных чисел от 1 до n
  • Обращение к WhoIs для IP на PHP
  • Галерея изображений
  • Открытие CD-ROM
  •  
    Комментарии (0) Распечатать




    © 2008 - 2010. Копирование материалов запрещено!
    Мой аккаунт
     
    Логин
    Пароль
     
     
     
    Опрос
     
    Чего нам не хватает?

    Ничего, все прекрасно и так!
    Другого дизайна
    Больше кодов
    Больше комментариев
    Посещаемости
    Дополнительных сервисов для удобства пользователей
    Другое (напишите, пожалуйста, что)
     
     
    Друзья
     
    serial, crack, keygen
    cool-archive.ru
    ABC-IT.lv - истиному ИТишнику!
     
     
    Архив кодов
      Август 2011 (1)
    Июль 2011 (4)
    Июнь 2011 (3)
    Апрель 2011 (2)
    Февраль 2011 (5)
    Январь 2011 (3)
     
     
     
    Реклама