Статические массивы в структурах




Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное учреждение

высшего профессионального образования

«Владимирский государственный университет

Имени Александра Григорьевича и Николая Григорьевича Столетовых»

(ВлГУ)

 

 

Лабораторная работа №1

По дисциплине «объектно-ориентированное программирование»

«Работа с классами»

 

Выполнил:

ст. гр. АИСс-112

Сёмин Максим Александрович

Проверил:

ст. преподаватель каф. ФиПМ

Шишкина М.В.

 

 

Владимир, 2013


Постановка задачи

Создать класс Complex для работы с комплексными числами, который должен содержать два целочисленных скрытых (приватных) поля Re, lm. Конструктор по умолчанию и конструктор инициализации. Методы для чтения и записи, соответствующих полей, один из которых будет запрашивать у пользователя значения полей на ввод с клавиатуры, а другой выводить значения полей на экран

Создать два экземпляра класса

Для первого вызвать конструктор по умолчанию, для второго конструктор инициализации.

Вывести значение полей на экран, сопровождая их пояснительными надписями.

С помощью соответствующих методов изменить значения полей и снова вывести их на экран.

С помощью конструктора копирования скопировать значения полей одного объекта в другой объект и снова вывести их на экран

Создать две дружественные функции унарную и бинарную, перегрузить бинарные и унарные операции (поств и префиксн)

Теоретическая часть

1) Структура, синтаксис, классы, примеры.

Классы в С++ - это абстракция описывающая методы, свойства, ещё не существующих объектов. Объекты - конкретное представление абстракции, имеющее свои свойства и методы. Созданные объекты на основе одного класса называются экземплярами этого класса. Эти объекты могут иметь различное поведение, свойства, но все равно будут являться объектами одного класса. В ООП существует три основных принципа построения классов:

Инкапсуляция - это свойство, позволяющее объединить в классе и данные, и методы, работающие с ними и скрыть детали реализации от пользователя.

Наследование - это свойство, позволяющее создать новый класс-потомок на основе уже существующего, при этом все характеристики класса родителя присваиваются классу-потомку.

Полиморфизм - свойство классов, позволяющее использовать объекты классов с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.

Структуру объявления классов:

// объявление классов в С++

class /*имя класса*/

{

private:

/* список свойств и методов для использования внутри класса */

public:

/* список методов доступных другим функциям и объектам программы */

/*Спецификатор public позволяет переменным/объектам созданным на основе данной структуры/класса получить доступ к полям. */

protected:

/*список средств, доступных при наследовании*/

};

Конструктор - специальная функция, которая выполняет начальную инициализацию элементов данных, причём имя конструктора обязательно должно совпадать с именем класса. Важным отличием конструктора от остальных функций является то, что он не возвращает значений вообще никаких, в том числе и void. В любом классе должен быть конструктор, даже если явным образом конструктор не объявлен, то компилятор предоставляет конструктор по умолчанию, без параметров.

Деструктор - это специальные методы, которые разрушают объекты и освобождают занимаемую ими память. Объявление деструктора подобно объявлению процедуры, но вместо слова процедура указывается destructor

Методы - это функция, объявленная внутри определения класса и тесно связанная с типом этого класса.

Оператор в С++ - это некоторое действие или функция обозначенная специальным символом.

Структура – это составной объект, в который входят элементы любых типов, за исключением функций. В отличие от массива, все элементы которого однотипны, структура может содержать элементы разных типов. В языке C++ структура является видом класса и обладает всеми его свойствами, но во многих случаях достаточно использовать структуры так, как они определены в языке Си:

struct [ имя_типа ]

{

тип_1 элемент_1;

тип_2 элемент_2;

...

тип_n элемент_n;

} [ список_описателей ];

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

Пример:

struct {

int year;

char moth;

int day;

} date, date2;

Если список отсутствует, описание структуры определяет новый тип, имя которого можно использовать в дальнейшем наряду со стандартными типами.

Пример:

struct student{ // описание нового типа student

char fio[30];

long int num_zac;

double sr_bal;

}; // описание заканчивается точкой с запятой

 

student gr[30], *p; // определение массива типа student и

//указателя на тип student.

Для инициализации структуры значения ее элементов перечисляют в фигурных скобках в порядке их описания:

Пример:

struct {

char fio[30];

long int num_zac;

double sr_bal;

}student1 = {"Necto", 011999,3.66};

 

· Способы доступа и обращения к полям.

Доступ к полям структуры выполняется с помощью операций выбора. (точка) при обращении к полю через имя структуры и операции –> при обращении через указатель.

Пример:

student student1, gr[30], *p;

student.fio = "Страусенке":

gr[8].sr_bal=5;

p–>num_zac = 012001;

Если элементом структуры является другая структура, то доступ к ее элементам выполняется через две операции выбора.

Пример:

struct A {

int a;

double х;

};

struct В {

A a;

double х,

} х[2];

х[0].а.а = 1;

х[1]. х = 0.1;

Из примера видно, поля разных структур могут иметь одинаковые имена, поскольку у них разная область видимости. Более того, можно объявлять в одной области видимости структуру и другой объект (например, переменную или массив) с одинаковыми именами, если при определении структурной переменной использовать слово struct.

· Массив структур.

Статические массивы в структурах

Полем структуры может быть одномерный или двумерный массивы

фиксированной размерности. Например,

struct Matr

{ int a[2][3];

float b[3];

char fio[20];

};

.....

Matr Str;

Str.a[0][0]=25;

cout<<Str.a[i][j];

cin>>Str.b[2];

Str.fio[0]='*';

Сначала необходимо определить структурный тип, а затем объявить

массив переменных данного типа.

Например,

struct Date

{ char Fam[20];

char Name[10];

long TelephoneNumber;

};

struct date

{ int day, month, year;

};

struct person

{ char fam[20];

date birthday;

float weight;

int height;

};

Date list[10];

const n=100;

person P1[n];

Matr matr[n];

.....

cin>>list[1].Fam;

cout<<P1[i]. birthday.day;

matr[0].a[0][1]=25;



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-07 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: