Другие языки программирования и технологии

Несколько вопросов про синтаксиз С++ .За отличный и полный ответ 50 баллов.

1) Текст программы взят из http://www.intbook.info/C/Glava_02/Index17.htm
if ( ((Editl-XText).Length() == 0) || ((Edit2->Text).Length() ==0))
В целом эта строчка мне понятна (Если ноль в Editl или в Edit2, то срабатывает процыдура MessageDig), но мне непонятны отдельные слова, это XText, Text и Length(). Объясните значение каждого слова, и почему перед Length() стоит точка?

2) Мне непонятны операции выбора компонентов структурированных объектов и классов. В книгах и в интернете написано какой знак что означает, но редко и непонятно поясняются. Приведите пожалуйсто примеры с участием следующих знаков -> . .* ->* :: С подробными комментариями.
Заранее благодарю.
1. XText - какая то переменная, надо полагать она определена в другой главе (как я понял, одна и та же программа последовательно изменяется в нескольких главах подряд) . Text - это поле объекта Edit2, .Length() - вызов для объекта (Edit2->Text) функции, подсчитывающую длину этого объекта ()строки)
2. По поводу использования операций выбора компонентов.
class A
{
/.../
public:
A();
void SomeFunc();
/.../
}
И далее созданы объект и ссылка на объект:
A a,*b;
//инициализация
то, если мы вызовем функцию SomeFunc для объекта a, мы воспользуемся точкой: a.SomeFunc()
b является ссылкой на класс A, поэтому когда в b будет объект и мы захотим вызвать функцию, мы напишем b->SomeFunc.
два двоеточия используются в том случае, если мы хотим конкретно указать, для какого класса вызывается функция.
Пример: определение фнукций. есть заголовочный файл test.h, в котором объявлен класс A, но там содержатся только прототипы функций, а сами функции мы планируем описать в файле test.cpp. Естественно, в test.cpp первой строкой будет #include "test.h", но если мы далее напишем
void SomeFunc()
{
\\ вычисления
}, эта функция классу А принадлежать не будет. Поэтому надо написать так:
void A::SomeFunc()
{
}. Это не единственный случай, но принцип именно такой - сказать компилятору, из какого класса функция, если он может ошибиться
Валентин Ильин
Валентин Ильин
862
Лучший ответ
if ( ((Editl->Text).Length() == 0) || ((Edit2->Text).Length() ==0))

Edit1 и Edit2 - указатели на объекты класса (не известно какого)
Editl->Text - пременная член этого класса, в свою очередь тоже объект какого то класса (типа строчки)

Text.Length() = вызов метода, возвращающего длину строки.

// описание класса
class foo
{
public:
foo(); // конструктор класса
~foo(); // деструктор класса

int Metod(); // метод класса (функция - член)
int Property; // свойство класса (переменная -член)
};

// реализация класса
foo::foo()
{
// конструктор
}

foo::~foo()
{
// деструктор
}

foo::Metod()
{
// метод
return Property;
}

main()
{
foo var; // объект класса foo
foo *pvar = &var;// указатель на объект класса

int a = var.Property; // доступ к переменной класса через объект класса
int b = pvar->Property;// тоже самое, только через указатель на объект класса

a = var.Method(); // вызов метода класса через объект класса
b = pvar->Method(); // тоже самое, только через указатель на объект класса
}

.* ->* указатели на члены класса.
Аслан Бадиев
Аслан Бадиев
21 360