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)