Классы и типы методов в них... - страница 2

 
Meat:

Документация не является обучающим пособием, поэтому не рассчитана на то чтобы разжёвывать каждое слово. Предполагается, что у человека уже есть знания в этой области, и он лишь хочет уточнить конкретные детали по поводу реализации этого в MQL.

Давайка по порядку.

Что такое документация? Вики говорит, что так. Как можно уточнить деталь если о ней не написано? Вы вообще адекватный человек? По Вашем деталь - это общие фразы? Деталей в вышеприведённой мной цитате нет. Есть некая общая субстанция. А если бы упомянули о конкретно глубже, касательно, членов и элементов-классов, это бы уже была деталь... Надеюсь так понятно? Или нужно разжевать?

Ладно я бывает заработаюсь и могу задать вопрос, который сам решаю спустя некоторое время. Но Вы утверждаете, видимо обдумав то, что не является логичным. Вам же  simpleton написал то, чего нет. Уже можно было прочитать и понять что это верно. Тут не вооружённым глазом видно, что всё логично.

Meat:

Понятие структуры идёт ещё со времён динозавров, когда и ООП ещё не было - это просто некие данные, разбитые на отдельные элементы.   Да и там по тексту очевидно, что речь идёт о данных.  А кому не очевидно - читайте учебники.

А классы и появились, чтоб по дефолту делать некоторые вещи приватными. Это типа как удобство. Сишники такого же мнения. Я интересовался данными вещами, ещё тогда, когда изучал данный вопрос. 

 

У, как всё запущено...

Господа "программисты", вы вообще понимаете, что такое viod

void - пустота. Этот "тип" придуман для функций, которые ничего не возвращают.

 
Contender:

У, как всё запущено...

Господа "программисты", вы вообще понимаете, что такое viod

void - пустота. Этот "тип" придуман для функций, которые ничего не возвращают.

В C/C++ есть ещё применения для типа void. Например, void * - указатель на данные любого типа. Такой указатель приводится к указателю любого типа безо всякого предупреждения
 
stringo:
В C/C++ есть ещё применения для типа void. Например, void * - указатель на данные любого типа. Такой указатель приводится к указателю любого типа безо всякого предупреждения

Неправда.

C:

int main(void) {
        void *p = &p;       /* p - указатель на void */
        int (*f)(void) = p; /* f - указатель "любого типа", в данном случае - указатель на функцию */
        return 0;
}

Компилятор ругается вполне определённым образом:

$ gcc -pedantic -std=c99 -c try.c
try.c: In function 'main':
try.c:3:19: warning: ISO C forbids initialization between function pointer and 'void *' [-pedantic]

C++:

int main() {
        void *p(&p);   // p - указатель на void
        int *i(p);     // i - указатель "любого типа", в данном случае - указатель на int
        int (*f)()(p); // f - указатель "не менее любого типа", в данном случае - указатель на функцию
        return 0;
}

Компилятор также ругается вполне определённым образом в обоих случаях:

$ g++ -pedantic -std=c++11 -c try.cpp
try.cpp: In function 'int main()':
try.cpp:3:10: error: invalid conversion from 'void*' to 'int*' [-fpermissive]
try.cpp:4:14: error: invalid conversion from 'void*' to 'int (*)()' [-fpermissive]

Кстати, так и не ответили на вопрос, как переменные могут считаться использованными, если для изобретённого вида "использования" (есть инициализация - значит, есть использование) при удалении из любой программы переменных, "использованных" именно таким образом, логическое поведение этой любой программы абсолютно не меняется.

Для данных примеров, кстати, для C:

$ gcc -pedantic -std=c99 -Wall -c try.c
try.c: In function 'main':
try.c:3:19: warning: ISO C forbids initialization between function pointer and 'void *' [-pedantic]
try.c:3:8: warning: unused variable 'f' [-Wunused-variable]

с точки зрения "взрослого" компилятора, переменная f НЕ является использованной, несмотря на то, что она инициализирована.

Для C++:

$ g++ -pedantic -std=c++11 -Wall -c try.cpp
try.cpp: In function 'int main()':
try.cpp:3:10: error: invalid conversion from 'void*' to 'int*' [-fpermissive]
try.cpp:4:14: error: invalid conversion from 'void*' to 'int (*)()' [-fpermissive]
try.cpp:3:7: warning: unused variable 'i' [-Wunused-variable]
try.cpp:4:8: warning: unused variable 'f' [-Wunused-variable]

с точки зрения "взрослого" компилятора, и переменная i, и переменная f, - обе НЕ являются использованными, несмотря на то, что обе инициализированы.

Логика "использованности", по крайней мере, для встроенных типов, очень проста: если значение переменной НЕ прочитано, она НЕ использована.
Именно поэтому "взрослый" компилятор считает, что в обоих случаях переменная p ЯВЛЯЕТСЯ использованной.

 
simpleton:
Указатель на функцию не дружит с указателем на void
 
TheXpert:
Указатель на функцию не дружит с указателем на void

Именно эту "небрежность" в формулировке я и подчеркнул. А для C++ это уже даже не "небрежность".

 

Про адресное пространство команд и адресное пространство данных не забываем:) 

Цитирую stringo: " ... void * - указатель на данные любого типа ...  ".  

 
tara:

Про адресное пространство команд и адресное пространство данных не забываем:) 

Цитирую stringo: " ... void * - указатель на данные любого типа ...  ".  

Я в примерах завёл какой-то другой указатель?

А дальше процитировать? Я имею ввиду: "Такой указатель приводится к указателю любого типа". Уже ничего не сказано про данные. Ведь, - верно? Ещё хорошо, что навскидку не пришла в голову мысль об указателях на члены/методы класса, чтобы к ним привести...

Даже если не обращать на это внимания, то для C++ данное утверждение неверно. Зато верно обратное утверждение (применительно к обычным указателям на данные), для обоих языков.

 
simpleton:

Я в примерах завёл какой-то другой указатель?

А дальше процитировать? Именно: "Такой указатель приводится к указателю любого типа". Уже ничего не сказано про данные. Ведь, - верно?

Даже если не обращать на это внимания, то для C++ данное утверждение неверно. Зато верно обратное утверждение, для обоих языков.


Я старый солдат, я не знаю слов любви и никогда сам не программировал на С. 

Просто, маненько понимаю всю эту кухню и не люблю, когда толкование продолжения фразы выдергивается из контекста начала оной фразы. 

 
tara:


Я старый солдат, я не знаю слов любви и никогда сам не программировал на С. 

Просто, маненько понимаю всю эту кухню и не люблю, когда толкование продолжения фразы выдергивается из контекста начала оной фразы. 

Не выдёргивается толкование. Сказано, что "void * - указатель на данные любого типа, и он приводится к указателю любого типа". С первой частью фразы всё нормально. А со второй - что такое "указатель любого типа"? Как построить фразу, если действительно нужно было бы утверждать, что некий указатель приводится к указателю не только на данные? Так и построить, как stringo это сделал, ведь - верно?

Причина обращения: