Перейти к содержанию
Форекс Форум трейдеров Академии «MasterForex-V»

Начальное обучение (Теория)


Рекомендуемые сообщения

Классы и указатели

 

На прошлых уроках мы видели только один способ объявления экземпляров класса - а именно мы писали что-то вроде:

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();

Ссылка на комментарий
Поделиться на другие сайты

  • 2 месяца спустя...
  • Ответов 34
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Изображения в теме

Функции

Функция - это совокупность объявлений и операторов, обычно предназначенная для решения определенной задачи. Каждая функция должна иметь имя, которое используется для ее объявления, определения и вызова. В любой программе на С++ должна быть функция с именем main (главная функция), именно с этой функции, в каком бы месте программы она не находилась, начинается выполнение программы.

Синтаксис функции:

[тип] имя-функции ([список-параметров])

{тело-функции}

Пример:

void main()

 

В данном случае void main(){} - это процедура, потому что, она не возвращает никакого значения,(void - пустой)

функция обязяна возвращать значение - int main(){return 0;}

или например, с передачей аргументов командной строки - int main(int argc, char* argv[]){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;

}

Ссылка на комментарий
Поделиться на другие сайты

  • 2 месяца спустя...
Всем привет! Не подумайте, что я пришел пофлудиться, но я думал, что плюсы для другого идут. а в МТ4 МКюЛ4 ? Что пишеться на плюсах и для чего?
Ссылка на комментарий
Поделиться на другие сайты

Всем привет! Не подумайте, что я пришел пофлудиться, но я думал, что плюсы для другого идут. а в МТ4 МКюЛ4 ? Что пишеться на плюсах и для чего?

 

Формулировка сути вопроса лично мне не до конца ясна. сделайте уточнение.

Ссылка на комментарий
Поделиться на другие сайты


×
×
  • Создать...