RE:Доступ к приватной переменной из порожденного класса

From
Ilya Shappo (2:5085/34.12)
To
Dmitry Bagdanow ()
Date
1998-04-27T08:20:32Z
Area
SU.WINDOWS.NT.PROG
Hello Dmitry

IS> Решил я тут сотворить на Borland C++ Builder свой класс IString на 
IS> базе  стандартного AnsiString и пополнить его кое-какими своими 
IS> методами, но не  могу получить доступ к приватной переменной Data 
IS> из класса AnsiString.  Выдается сообщение: 
IS> 'System::AnsiString::Data' is not accessible  :(

DB>    Попpобyй так:
DB>    1. Посмотpи смещение поля Data в отладчике. Затем можно сделать так:
DB>       AnsiString str = "Cool string";
DB>       int offset = ???; // смещение можно посмотpеть в отладчике
DB>       char **pData = ((char*)&str) + offset;
DB>    2. Попpобyй yбpать спецификатоp private из хидеpа. Относительное
DB> pасположение членов-данных измениться не должно, и сyществyющий код бyдет
DB> pаботать.

А я уже придумал способ попроще. В классе AnsiString есть метод 
char* c_str(void), который возвращает переменную Data в виде нуль-терминированной
строки. И вот, что получилось (это один из методов, который я добавил в своем
порожденном классе):

IString __fastcall IString::StrRight(int count)
{
  tmp = c_str(); // tmp - это переменная AnsiString, которая объявлена приватной
                 // в моем классе IString     
  return tmp.SubString(tmp.Length() - count + 1, count);
}

Good Luck!

IlyaShappo@yahoo.com                                 = Ilya Shappo =

--- FIPS/32 v0.99b W95/NT [M]
 * Origin: ... And Justice For All (2:5085/34.12)