Потребителски панел
Запомни
Категории
C/C++ (17)
C# (8)
Java (5)
Visual Basic (18)
Delphi/Pascal (11)
Python (4)
Assembly (0)
Други (0)
Facebook
Структури | Автор: admin | Дата: 20.08.2011


Няколко елемента групирани в група с определено име се нарича структура. Елементите, още наричани членове, могат да бъдат от различен тип и с различна дължина. Синтаксиса за деклариране на структура в C++ е следният:
struct structure_name {
member_type1 member_name1;
member_type2 member_name2;
member_type3 member_name3;
.
.
} object_names;

където structure_name е името на структурата, object_names може да бъде набор от валидни идентификатори на обекти от типа на структурата. Между скобите се намира списък на член данните, от даден тип и с даден идентификатор.

Първото нещо което трябва да знаем е че при създаването на структура, създаваме нов тип, който може да бъде използван за създаване на нови обекти. За нагледен пример, разгледайте следният код:
struct product {
int weight;
float price;
} ;

product apple;
product banana, melon;

Първо създаваме структурата product с два члена: weight и price, всеки от различен тип. След това използваме името на структурата за тип, като създаваме 3 нови обекта. От момента на декларирането на структурата, тя се превръща във валиден тип, каквито са int, char и т.н.
Точно в края на структурната декларация, но преди точката и запетаята, можем да използваме полето именуване по-горе като object_names за да декларираме обектите apple, banana и melon директно. Тоест следният пример е еквивалентен на горния:
struct product {
int weight;
float price;
} apple, banana, melon;

След като вече сме декларирали нашите 3 обекта, можем да достъпим техните членове използвайки точка между името на обекта и името на член данната. Пример:
apple.weight
apple.price
banana.weight
banana.price
melon.weight
melon.price

Като трябва да се подчертае, че типа данни на apple.weight, banana.weight и melon.weight отговаря на типа на съответният член, тоест в случая int. Аналогично типа данни на apple.price, banana.price и melon.price е float.
А сега един малко по-задълбочен пример:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;

struct movies_t {
string title;
int year;
} mine, yours;

void printmovie (movies_t movie);

int main ()
{
string mystr;

mine.title = "2001 A Space Odyssey";
mine.year = 1968;

cout << "Enter title: ";
getline (cin,yours.title);
cout << "Enter year: ";
getline (cin,mystr);
stringstream(mystr) >> yours.year;

cout << "My favorite movie is:\n ";
printmovie (mine);
cout << "And yours is:\n ";
printmovie (yours);
return 0;
}

void printmovie (movies_t movie)
{
cout << movie.title;
cout << " (" << movie.year << ")\n";
}

Примера показва как можем да използваме членовете на обекта като нормални променливи. Обектите mine и yours също могат да бъдат третирани като променливи. В примера ги прехвърляме на функцията printmovie както бихме направили с нормални променливи. Това е едно от големите предимства на структурите, можем да се обръщаме към техните членове индивидуално, както и към цялата структура като блок, само с един идентификатор.
Структурите могат да служат като бази данни, ако построим масиви от тях:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;

#define N_MOVIES 3

struct movies_t {
string title;
int year;
} films [N_MOVIES];

void printmovie (movies_t movie);

int main ()
{
string mystr;
int n;

for (n=0; n<N_MOVIES; n++)
{
cout << "Enter title: ";
getline (cin,films[n].title);
cout << "Enter year: ";
getline (cin,mystr);
stringstream(mystr) >> films[n].year;
}

cout << "\nYou have entered these movies:\n";
for (n=0; n<N_MOVIES; n++)
printmovie (films[n]);
return 0;
}

void printmovie (movies_t movie)
{
cout << movie.title;
cout << " (" << movie.year << ")\n";
}

В последният пример ще покажем възможността за създаване на структура в друга такава:
struct movies_t {
string title;
int year;
};

struct friends_t {
string name;
string email;
movies_t favorite_movie;
} charlie, maria;

Ето и начина за достъпване на елементите:
maria.favorite_movie.title
charlie.favorite_movie.year


Урока е подготвен специално за Programming-BG.com. Моля не копирайте без мое съгласие!
Източник: www.cplusplus.com

           


Беше ли Ви от полза урокът?
да не




Искате да пишете коментари? Влезте от тук или се регистрирайте!



Все още няма коментари за този урок.