Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Struct имя_типа_данных




Краткие сведения о типе данных структура (struct) и работе с ним.

Аналогично можно осуществить ввод данных и для переменных str2 и str3.

*/

cout << "Enter string 2: ";

getline(cin, str2);

cout << "Enter string 3: ";

getline(cin, str3);

/*

Метод find класса string предназначен для поиска 1-ого аргумента во внутреннем буфере экземпляра класса, для которого он вызван, начиная с позиции, указанной 2-ым аргументом. Он возвращает номер символа, с которого начинается подстрока str2 в строке str1 или значение < 0, если поиск был неудачен.

Метод length класса string предназначен для получения длины строки.

*/

if (str2.length() > 0)

for (int pos = 0; (pos = str1.find(str2, pos)) >= 0; pos += str3.length())

{

/*

Метод erase класса string предназначен для удаления во внутреннем буфере экземпляра класса, для которого он вызван, начиная с позиции, указанной 1-ым аргументом, количества символов, указанного 2-ым аргументом.

*/

str1.erase(pos, str2.length());

/*

Метод insert класса string предназначен для вставки 2-ого аргумента во внутренний буфер экземпляра класса, для которого он вызван, начиная с позиции, указанной 1-ым аргументом.

*/

str1.insert(pos, str3);

}

cout << str1 << endl;

return 0;

}

Следует отметить, что данный пример не будет работать в среде Microsoft Visual Studio 6.0 ввиду неправильной работы функции getline (2-ая строка не будет считываться). Если же использовать ввод данных в переменные типа string через входной поток cin, не используя функцию getline, то пример 1 будет работоспособен и в среде Microsoft Visual Studio 6.0.

 

Тип данных структура (struct) используется для описания класса и представляет собой совокупность данных, которые могут иметь различный тип, и действий, которые можно над этими данными произвести. Это их основное отличие от массивов. На языке C++ тип данных структура описывается следующим образом (приводится в сокращенном виде):

 

{

тип_данных1 Имя_поля1;

тип_данных2 Имя_поля2, Имя_поля3;

тип_данныхM Имя_поляN;

описание_конструктора;

описание_деструктора;

описание_перегруженных_операторов;

} имя_перем1, …, имя_перемK;

После описания пользовательского типа данных структура можно сразу же описывать переменные этого типа (экземпляры этого класса), как показано выше. Если этого не сделать, то после символа } ОБЯЗАТЕЛЬНО НУЖНО ПОСТАВИТЬ ТОЧКУ С ЗАПЯТОЙ.

Объем памяти, который будут занимать переменные типа структура (при описании рассмотренным выше способом) в оперативной памяти, вычисляется путем сложения длин всех полей структуры.

Конструктор и деструктор - это специальные функции, которые относятся к типу данных структура (являются его методами) и имеют строго определенные имена: имя конструктора совпадает с именем типа данных, а имя деструктора - ~имя_типа_данных. Их написание необязательно (всегда генерируются автоматически, хотя при этом не выполняют никаких видимых пользователем действий). Конструктор и деструктор всегда вызываются автоматически: конструктор - при создании экземпляра описанного типа (описании статической переменной или выделении памяти с помощью оператора new при работе с динамическими переменными), а деструктор - при уничтожении экземпляра класса (для статической переменной - при выходе за пределы области видимости: для локальных переменных - это, как правило, функция, в которой они описаны, а для глобальных переменных или переменных с классом памяти static - при окончании работы программы; для динамических переменных - при вызове оператора delete). Конструктор может иметь аргументы, в этом случае при описании (выделении памяти) для них нужно подставить фактические параметры. В конструкторе обычно прописывают действия, необходимые при создании экземпляра класса, например, начальную инициализацию полей структуры. В деструкторе прописывают действия, необходимые при уничтожении экземпляра класса, например, освобождение динамически выделенной памяти.

Следует отметить, что для структуры не определены операторы присваивания, сравнения, арифметические, побитовые, логические. Однако существует возможность описать работу любого из нереализованных операторов в виде специальной функции (метода), которая также как и конструктор имеет описание к описываемому типу данных структура. Это делается с помощью ключевого слова operator, за которым идет обозначение перегружаемого оператора. Это используется вместо имени функции.

Рассмотрим пример описания типа данных структура и переменной этого типа, а также работы с ней:

 

Пример 2. Описание структуры для работы с точкой в двумерной Декартовой системе координат.

#include <stdio.h>

#include <math.h>




Поделиться с друзьями:


Дата добавления: 2017-01-14; Просмотров: 315; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.