- Новый контент
- Книга Masterforex-V
-
Академия
- Как стать слушателем Академии
- ⇒ ТС Masterforex-V - Интенсивный Курс Онлайн
- ⇒ Факультет Форекс Скальпинга Magister
- ⇒ Факультет СРЕДНЕсрочной торговли и паттернов ГОСТ
- ⇒ Кафедра ДФВА
- ⇒ Кафедра Опционной Торговли
- ⇒ Факультет биржевой торговли "Futures Trade and Stock Exchange"
- ⇒ Факультет торговли объёмом"
- ⇒ Факультет Инвестиций
- ⇒ ФАКУЛЬТЕТ Пробой Флета, Автоматизация, Автотрейдинг
- ⇒ Кафедра Спектрального Анализа FOREX и ИНДЕКСОВ валют
- ⇒ Система раннего прогнозирования в ТС МФ на основе модернизации АО и WPR
- ⇒ Кафедра FMA_Sar
- ⇒ Кафедра синергетического объемно-волнового анализа (СОВА)
- ⇒Кафедра бинарных опционов
- Как продлить доступ в закрытую часть Академии?
- Форумы
- Галерея
- Блоги
- Скачать
- Контакты
- Личный кабинет
- Больше
|
Начальное обучение (Теория)
Автор темы:
nsg
, дек 17 2009 07:35
34 ответов в этой теме
#31
Опубликовано 26 Март 2010 - 05:45
Классы и указатели
На прошлых уроках мы видели только один способ объявления экземпляров класса - а именно мы писали что-то вроде:
CMyClass z;
Вообще же говоря экземпляры класса лучше во многих случаях заводить не в стеке, а в куче (at heap) Это, в частности, связано с тем, что стек - вещь довольно-таки ограниченная по объему, классы же часто представляют из себя довольно-таки большие и сложные объекты, и если вы будете размещать в стеке что-то вроде массива экземпляров класса, то объема стека просто может не хватить (хотя, конечно, для учебных программм это случится навряд ли).
Так же как и для встроенных типов данных для размещения экземпляра класса в куче использется оператор new. Именно он и занимается выделением памяти. Вот пример:
CMyClass * z;
z = new CMyClass; // Непосредственное выделение памяти.
Конструктор класса при этом вызовется на второй строке, т. е. в операторе new.
Эти два оператора можно объединить:
CMyClass * z = new CMyClass; // Непосредственное выделение памяти.
Если в классе есть конструктор с параметрами, то он вызывается примерно так:
// Вызов конструтора с одним параметром.
CMyClass * z = new CMyClass(22);
// Вызов конструтора с двумя параметрами.
CMyClass * z = new CMyClass(22, 44);
Еще одно отличие между двумя способами создания экземпляра класса (в стеке или в куче) - это вызов методов класса. Если при создании экземпляра в стеке между именем экземпляра и именем метода используется точка, то при создании экземпляра класса в куче (т. е. через оператор new) используется стрелочка. Вот пример:
CMyClass * z = new CMyClass;
z->SomeMethod();
На прошлых уроках мы видели только один способ объявления экземпляров класса - а именно мы писали что-то вроде:
CMyClass z;
Вообще же говоря экземпляры класса лучше во многих случаях заводить не в стеке, а в куче (at heap) Это, в частности, связано с тем, что стек - вещь довольно-таки ограниченная по объему, классы же часто представляют из себя довольно-таки большие и сложные объекты, и если вы будете размещать в стеке что-то вроде массива экземпляров класса, то объема стека просто может не хватить (хотя, конечно, для учебных программм это случится навряд ли).
Так же как и для встроенных типов данных для размещения экземпляра класса в куче использется оператор new. Именно он и занимается выделением памяти. Вот пример:
CMyClass * z;
z = new CMyClass; // Непосредственное выделение памяти.
Конструктор класса при этом вызовется на второй строке, т. е. в операторе new.
Эти два оператора можно объединить:
CMyClass * z = new CMyClass; // Непосредственное выделение памяти.
Если в классе есть конструктор с параметрами, то он вызывается примерно так:
// Вызов конструтора с одним параметром.
CMyClass * z = new CMyClass(22);
// Вызов конструтора с двумя параметрами.
CMyClass * z = new CMyClass(22, 44);
Еще одно отличие между двумя способами создания экземпляра класса (в стеке или в куче) - это вызов методов класса. Если при создании экземпляра в стеке между именем экземпляра и именем метода используется точка, то при создании экземпляра класса в куче (т. е. через оператор new) используется стрелочка. Вот пример:
CMyClass * z = new CMyClass;
z->SomeMethod();
ICQ 296461926
#32
Опубликовано 09 Июнь 2010 - 02:43
Функции
Функция - это совокупность объявлений и операторов, обычно предназначенная для решения определенной задачи. Каждая функция должна иметь имя, которое используется для ее объявления, определения и вызова. В любой программе на С++ должна быть функция с именем main (главная функция), именно с этой функции, в каком бы месте программы она не находилась, начинается выполнение программы.
Синтаксис функции:
[тип] имя-функции ([список-параметров])
{тело-функции}
Пример:
void main()
В данном случае void main(){} - это процедура, потому что, она не возвращает никакого значения,(void - пустой)
функция обязяна возвращать значение - int main(){return 0;}
или например, с передачей аргументов командной строки - int main(int argc, char* argv[]){return 0;}
#33
Опубликовано 09 Июнь 2010 - 03:34
Ещё по поводу указателей, готовая прога, подсчитывает количество символов в строке, написана для того чтобы, показать как указатели работают с памятью.
#include "stdafx.h"
#include <iostream.h>
int main(int argc, char* argv[])
{
char string[] = "good string"; // объявляем строку (массив символов, которые имеют один тип данных char)
char* pointer = NULL; // объявляем указатель типа char, инициализируем нулём (хороший тон)
int counter = 0; // объявляем переменную счётчик, для подсчёта итераций(прохождений) цикла
pointer = string; // устанавливаем указатель на нулевой элемент массива (строки)
while(*pointer != NULL) // *p - указатель разыменован(т.е. по данному адресу берёт значение),
// и двигаем указатель к концу строки, пока он не встретит '\0'
{
pointer++;
counter++;
}
cout << endl << "The string has a " << counter << " symbols " << endl << endl;
return 0;
}
#include "stdafx.h"
#include <iostream.h>
int main(int argc, char* argv[])
{
char string[] = "good string"; // объявляем строку (массив символов, которые имеют один тип данных char)
char* pointer = NULL; // объявляем указатель типа char, инициализируем нулём (хороший тон)
int counter = 0; // объявляем переменную счётчик, для подсчёта итераций(прохождений) цикла
pointer = string; // устанавливаем указатель на нулевой элемент массива (строки)
while(*pointer != NULL) // *p - указатель разыменован(т.е. по данному адресу берёт значение),
// и двигаем указатель к концу строки, пока он не встретит '\0'
{
pointer++;
counter++;
}
cout << endl << "The string has a " << counter << " symbols " << endl << endl;
return 0;
}
#34
Опубликовано 10 Август 2010 - 02:26
Всем привет! Не подумайте, что я пришел пофлудиться, но я думал, что плюсы для другого идут. а в МТ4 МКюЛ4 ? Что пишеться на плюсах и для чего?
#35
Опубликовано 16 Август 2010 - 04:34
Всем привет! Не подумайте, что я пришел пофлудиться, но я думал, что плюсы для другого идут. а в МТ4 МКюЛ4 ? Что пишеться на плюсах и для чего?
Формулировка сути вопроса лично мне не до конца ясна. сделайте уточнение.
icq 336674712
skype fx_mr.bags
skype fx_mr.bags
Посетителей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных пользователей