Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Приватный расприватить 
:(
    Опции темы
Neitron
Дата 11.5.2006, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 580
Регистрация: 3.10.2005
Где: Москва

Репутация: 2
Всего: 5



Подскажите, возможно ли приватный член класс, расприватить для одной единсвенной функции, не используя друзей и наследования? 


--------------------
Хороший программист никогда ничего не делает хорошо с первого раза. Он понимает важность патчей.
Ⓘ ⓁⒾⓀⒺ ⓂⓄⓏⒾⓁⓁⒶ
PM MAIL   Вверх
Earnest
Дата 11.5.2006, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Нельзя. Причем наследование тебе "расприватить" не поможет. Вот "распротектить" - это запросто  smile.
Кстати, раз возникла такая надобность, встает вопрос о дизайне: все ли там хорошо? Все же приватные члены - дело интимное. Или это не твой класс? Тогда расприватить тебе вообще ничто не поможет... 


--------------------
...
PM   Вверх
Neitron
Дата 11.5.2006, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 580
Регистрация: 3.10.2005
Где: Москва

Репутация: 2
Всего: 5



Класс VCL эти.... засунули OnMouseMove в приват.
Расприватить то я могу в наглую.... но не хочется лесть в чужой код....
Ладно. всё. 


--------------------
Хороший программист никогда ничего не делает хорошо с первого раза. Он понимает важность патчей.
Ⓘ ⓁⒾⓀⒺ ⓂⓄⓏⒾⓁⓁⒶ
PM MAIL   Вверх
MAKCim
Дата 11.5.2006, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата

Вот "распротектить" - это запросто

причем если наследование разрешено и конструктор не приватный  smile  


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
cozzzy
Дата 11.5.2006, 16:42 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 29.4.2006
Где: Харьков

Репутация: нет
Всего: нет



Код

#define private public
 
PM MAIL   Вверх
MAKCim
Дата 11.5.2006, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата

Код

#define private public


 smile  


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
bsa
Дата 11.5.2006, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(Neitron @ 11.5.2006,  16:11)
Класс VCL эти.... засунули OnMouseMove в приват.
Расприватить то я могу в наглую.... но не хочется лесть в чужой код....
Ладно. всё.

Есть у меня подозрение, что это было сделано специально (допустим, используется для внутренних целей). 
PM   Вверх
threef
Дата 11.5.2006, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 27.10.2005
Где: Запорожье

Репутация: 9
Всего: 10



Перехвати мышА раньше обработчика класса 
PM MAIL   Вверх
Earnest
Дата 11.5.2006, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Цитата(MAKCim @  11.5.2006,  17:40 Найти цитируемый пост)
причем если наследование разрешено и конструктор не приватный  

Ага, написать protected члены в классе, от которого запрещено наследоваться, это высший C++ пилотаж  smile  

Цитата(Neitron @  11.5.2006,  17:11 Найти цитируемый пост)
Класс VCL эти.... засунули OnMouseMove в приват.
Расприватить то я могу в наглую.... но не хочется лесть в чужой код....

Правильно, что не хочешь... библиотеки перекомпилировать придется...
Я совсем не знаю VCL (когда-то видела, но забыла как страшный сон), но могу предполжить несколько вариантов: 1) если этот метод private - его можно переопределить, причем сделать хоть protected, хоть public, только вызвать базовый метод не удастся 2) если не private, должен быть какой-то способ подключать свои обработчики, т.е. опять таки, можно его подменить в производном классе... 

Это сообщение отредактировал(а) Earnest - 11.5.2006, 18:05


--------------------
...
PM   Вверх
Mayk
Дата 12.5.2006, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



См. Саттера.

Да, если класс имеет шаблонные функции. Шаблонные ф-ции имеют полный доступ к private переменным класса.

Код

#include <stdio.h>

class NotSoPrivate
{
    int privateVariable;
    public:
    NotSoPrivate(){privateVariable = 144;}
    template<class T>    void doSomething(T arg){}
};


struct YetAnotherClass{
    YetAnotherClass(int* ptr) : deprivatedVariable(ptr){}
    int* deprivatedVariable;
};
template<>
void NotSoPrivate::doSomething(YetAnotherClass arg)
{
    (*arg.deprivatedVariable) = privateVariable; //<<<
}

int main()
{
    int deprivatedVariable;
    YetAnotherClass yac(&deprivatedVariable);
    NotSoPrivate nsp;
    nsp.doSomething(yac);
    printf("%d\n",deprivatedVariable);
}


 


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Earnest
Дата 12.5.2006, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Точно Mayk, отличное решение! Только вот вряд ли там есть подходящие функции...  


--------------------
...
PM   Вверх
MAKCim
Дата 12.5.2006, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата

Только вот вряд ли там есть подходящие функции...   

если уж лезть в чужой код, то самое то, хоть остальная логика не нарушится  smile  


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Vyacheslav
Дата 15.5.2006, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Что не то. 
Если это производный класс TControl, то там OnMouseMove - protected
Ну даже, если в Вашем классе свойство private и этот класс все таки производный от TControl, то вскрыть его не представляет проблем.
Код

class TProxyClass : public TControl
{
 //....
 public:
    __property   OnMouseMove;
};

TSomeClass* someClass 
//...
if (TControl* control = dynamic_cast<TSomeClass*>(someClass) )
{
      ((TProxyClass*)control)->OnMouseMove = MouseMove;
}



  


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1547 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.