147.12K

lec9

1.

Структуры С++

2.

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

3.

Объявление структуры
struct ИмяСтруктуры
{
тип имяПоля1;
тип имяПоля2;
. . .
тип имяПоляN;
};

4.

Пример
#include <iostream>
#include <string>
using namespace std;
struct person
{
int age;
string name;
};
int main()
{
person kate;
kate.name = "Kate";
kate.age = 30;
cout << "Name: " << kate.name << "\tAge: " << kate.age;
return 0;
}

5.

Пример
#include <iostream>
#include <string>
using namespace std;
struct person
{
int age;
string name;
};
int main()
{
person kate = {30 , "Kate"};
person tom = {age: 35, name: "Tom"};
person leo = {.age = 33, .name = "Leo"};
cout << "Name: " << kate.name << "\tAge: " << kate.age << endl;
cout << "Name: " << tom.name << "\tAge: " << tom.age << endl;
cout << "Name: " << leo.name << "\tAge: " << leo.age << endl;
return 0;
}

6.

Структура
#include <iostream>
#include <math.h>
using namespace std;
struct point3D {
int x, y, z;
};
int main()
{
double distance;
point3D a;
cout << "Input coords: ";
cin >> a.x >> a.y >> a.z;
distance = sqrt(a.x * a.x + a.y * a.y + a.z * a.z);
cout << "distance: " << distance << endl;
return 0;
}

7.

Структура
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
struct point3D {
int x, y, z;
};
double distance;
point3D a;
cout << "Input coords: ";
cin >> a.x >> a.y >> a.z;
distance = sqrt(a.x * a.x + a.y * a.y + a.z * a.z);
cout << "distance: " << distance << endl;
return 0;
}

8.

Структура
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
struct point3D {
int x, y, z;
} a;
double distance;
cout << "Input coords: ";
cin >> a.x >> a.y >> a.z;
distance = sqrt(a.x * a.x + a.y * a.y + a.z * a.z);
cout << "distance: " << distance << endl;
return 0;
}

9.

Структура
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
struct {
int x, y, z;
} a;
double distance;
cout << "Input coords: ";
cin >> a.x >> a.y >> a.z;
distance = sqrt(a.x * a.x + a.y * a.y + a.z * a.z);
cout << "distance: " << distance << endl;
return 0;
}

10.

Устройство структуры в памяти
Поля структуры расположены в памяти друг за другом и в том порядке, в
котором объявлены. Тип поля определяет сдвиг относительно предыдущего
поля. Имя поля - это сдвиг относительно адреса экземпляра. На самом деле
размер структуры не всегда равен сумме размеров её полей: это связано с
тем, что компилятор оптимизирует расположение структуры в памяти
и может поля небольшого размера подгонять до чётных адресов.

11.

Устройство структуры в памяти
#include <stdio.h>
#include <math.h>
using namespace std;
struct Test1 {
char a;
char b;
int c;
} A;
struct Test2 {
int x;
int y;
} B;
struct Test3 {
char a;
char b;
char c;
int d;
} C;
int main()
{
printf("sizeof(A) = %d\n", sizeof(A));
printf("sizeof(B) = %d\n", sizeof(B));
printf("sizeof(C) = %d\n", sizeof(C));
return 0;
}

12.

Структуры и функции
#include <iostream>
#include <math.h>
int main()
{
using namespace std;
bool f_equal;
MyPoint pt1, pt2;
struct MyPoint
{
int x;
int y;
};
pt1.x = 23;
pt1.y = 35;
pt2.x = 23;
pt2.y = 35;
f_equal = EqualPoints(pt1, pt2);
bool EqualPoints(MyPoint p1, MyPoint p2)
{
bool f = false;
if ((p1.x == p2.x) && (p1.y == p2.y))
f = true;
return f;
}
cout << f_equal << endl;
pt1.x = 100;
f_equal = EqualPoints(pt1, pt2);
cout << f_equal << endl;
return 0;
}

13.

Структуры и функции
#include <iostream>
#include <math.h>
int main()
{
using namespace std;
bool f_equal;
MyPoint pt1, pt2;
struct MyPoint
{
int x;
int y;
};
pt1.x = 23;
pt1.y = 35;
pt2.x = 23;
pt2.y = 35;
f_equal = EqualPoints(&pt1, &pt2);
bool EqualPoints(MyPoint *p1, MyPoint *p2)
{
bool f = false;
if ((p1->x == p2->x) && (p1->y == p2->y))
f = true;
return f;
}
cout << f_equal << endl;
pt1.x = 100;
f_equal = EqualPoints(&pt1, &pt2);
cout << f_equal << endl;
return 0;
}

14.

Структуры
rect screen = {{1, 1}, {100, 100}};
printf("rectangle with diagonal points:
(%d, %d), (%d, %d)\n",
screen.pt1.x, screen.pt1.y,
screen.pt2.x, screen.pt2.y);
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
return 0;
}
struct point {
int x;
int y;
};
struct rect {
point pt1;
point pt2;
};

15.

Структуры и функции
#include <iostream>
#include <math.h>
using namespace std;
struct point {
int x;
int y;
};
struct rect {
point pt1;
point pt2;
};
int main()
{
rect screen;
point middle;
screen.pt1 = makepoint(0, 0);
screen.pt2 = makepoint(1000, 1000);
middle = makepoint((screen.pt1.x + screen.pt2.x) / 2,
(screen.pt1.y + screen.pt2.y) / 2);
printf("middle point is (%d, %d)", middle.x, middle.y);
return 0;
}
point makepoint (int x, int y) {
return (point){x, y};
}
English     Русский Rules