35 / 90

C++ Structures (struct)

C++ tuzilmalari (struct)

Struktura - bu bitta nom ostidagi turli data types va a'zo funksiyalarning variables to'plami.

U class ga o'xshaydi, chunki ikkalasi ham har xil turdagi ma'lumotlar to'plamiga ega.

Aytaylik, siz biror kishi haqida ba'zi ma'lumotlarni saqlamoqchisiz: uning ismi, familiyasi, yoshi va maoshi.

Ushbu ma'lumotlarni alohida saqlash uchun turli xil o'zgaruvchilarni osongina yaratishingiz mumkin - ism, familiya, yosh, ish haqi.

Biroq, kelajakda siz bir nechta odamlar haqidagi ma'lumotlarni saqlashni xohlashingiz mumkin.

Endi siz har bir kishi uchun har bir ma'lumot uchun turli xil o'zgaruvchilar yaratishingiz kerak bo'ladi: ism_ism1, familiya_1, yosh1, maosh1, ism_ism2, familiya_2, yosh2, maosh2, ...

Kod qanchalik katta va tartibsiz ko'rinishini tasavvur qilishingiz mumkin. Bundan tashqari, o'zgaruvchilar (ma'lumot) o'rtasida hech qanday aloqa yo'qligi sababli, uni boshqarish juda qiyin vazifa bo'ladi.

Yaxshiroq yondashuv - bu shaxs kabi bir nom ostida barcha tegishli ma'lumotlar to'plamiga ega bo'lish va undan har bir shaxs uchun foydalanish.

Endi kod yanada toza, o'qilishi mumkin va samaraliroq ko'rinadi.

Shaxs nomi ostida barcha tegishli ma'lumotlar to'plami tuzilma hisoblanadi.

C++ dasturlashda tuzilmani qanday e'lon qilish mumkin?

struct keyword tuzilma turini, undan keyin identifier (tuzilma nomi)ni belgilaydi.

Keyin, figurali qavslar ichida siz ushbu strukturaning bir yoki bir nechta a'zolarini (figurali qavslar ichidagi o'zgaruvchilarni e'lon qilish) e'lon qilishingiz mumkin. Masalan:

example.cpp
struct Person
{
    string first_name;
    string last_name;
    int age;
    float salary;
};

Bu erda to'rt a'zodan iborat Shaxs strukturasi aniqlanadi: ism_familiya, yosh va maosh.

Struktura aniqlanganda xotira ajratilmaydi.

Tuzilish ta'rifi faqat o'zgaruvchilarni yaratish rejasidir. Siz uni ma'lumotlar turi sifatida tasavvur qilishingiz mumkin.

Quyidagi kabi butun sonni aniqlaganingizda:

example.cpp
int foo;

int foo o'zgaruvchisi faqat butun sonli elementlarni saqlashi mumkinligini bildiradi. Xuddi shunday, strukturaning ta'rifi faqat struktura o'zgaruvchisi aniqlanganda qanday xususiyatga ega ekanligini ko'rsatadi.

[!NOTE] Deklaratsiyani nuqta-vergul (;) bilan tugatishni unutmang.

Struktura o'zgaruvchisini qanday aniqlash mumkin?

Shaxs strukturasini yuqoridagidek e'lon qilgandan so'ng, struktura o'zgaruvchisini quyidagicha belgilashingiz mumkin:

example.cpp
Person bill;

Bu erda strukturaviy o'zgaruvchan veksel aniqlanadi, u Shaxs tipidagi tuzilmaga ega.

Tuzilish o'zgaruvchisi e'lon qilingandagina kompilyator tomonidan kerakli xotira ajratiladi.

Tuzilma a'zolariga qanday kirish mumkin?

Tuzilish o'zgaruvchisi a'zolariga nuqta (.) operator yordamida kirish mumkin.

Faraz qilaylik, siz tuzilma o'zgaruvchisi hisobining yoshiga kirishni va unga 50 ni belgilashni xohlaysiz. Ushbu vazifani quyidagi kod yordamida bajarishingiz mumkin:

example.cpp
bill.age = 50;

Misol: C++ tuzilishi

example.cpp
// Struktura o'zgaruvchisi a'zolariga ma'lumotlarni tayinlash dasturi

#include <iostream>
using namespace std;

struct Person
{
    string first_name;
    string last_name;
    int age;
    float salary;
};

int main()
{
    Person p1;
    
    cout << "Enter first name: ";
    cin >> p1.first_name;
    cout << "Enter last name: ";
    cin >> p1.last_name;
    cout << "Enter age: ";
    cin >> p1.age;
    cout << "Enter salary: ";
    cin >> p1.salary;

    cout << "\nDisplaying Information." << endl;
    cout << "First Name: " << p1.first_name << endl;
    cout << "Last Name: " << p1.last_name << endl;
    cout << "Age: " << p1.age << endl;
    cout << "Salary: " << p1.salary;

    return 0;
}

Chiqish

kod
Enter first name: Jane
Enter last name: Smith
Enter age: 27
Enter salary: 10000

Displaying Information.
First Name: Jane
Last Name: Smith
Age: 27
Salary: 10000

Bu erda to'rt a'zodan iborat Shaxs tuzilmasi e'lon qilinadi: ismi_ismi, familiyasi, yoshi va maoshi.

main() function ichida p1 struktura o'zgaruvchisi aniqlanadi. Keyin foydalanuvchidan ma'lumot kiritish so'raladi va foydalanuvchi tomonidan kiritilgan ma'lumotlar ko'rsatiladi.

C++ tuzilmalarida a'zo funksiyalari

C++ da tuzilmalar a'zo funksiyalarga ham ega bo'lishi mumkin.

Ushbu a'zo funksiyalari muntazam funksiyalarga o'xshaydi, lekin struktura doirasida aniqlanadi. Ular strukturaning ma'lumotlar a'zolariga bevosita kirishlari va ularni boshqarishlari mumkin.

Biz strukturani ta'rifi doirasida funksiyani belgilash orqali a'zo funksiyani e'lon qilishimiz mumkin.

example.cpp
struct Person {
    string first_name;
    string last_name;
    int age;
    float salary;

    // shaxs haqidagi ma'lumotlarni ko'rsatish uchun a'zo funksiyasi
    void displayInfo() {
        cout << "First Name: " << first_name << endl;
        cout << "Last Name: " << last_name << endl;
        cout << "Age: " << age << endl;
        cout << "Salary: " << salary << endl;
    }
};

Ushbu misolda Person tuzilmasi shaxs haqidagi ma'lumotlarni aks ettiruvchi displayInfo() a'zo funksiyasini o'z ichiga oladi.

Keling, bir misolni ko'rib chiqaylik.

example.cpp
#include <iostream>
using namespace std;

struct Person {
    string first_name;
    string last_name;
    int age;
    float salary;

    // shaxs haqidagi ma'lumotlarni ko'rsatish uchun a'zo funksiyasi
    void display_info() {
        cout << "First Name: " << first_name << endl;
        cout << "Last Name: " << last_name << endl;
        cout << "Age: " << age << endl;
        cout << "Salary: " << salary << endl;
    }
};

int main() {
    Person p1;
    
    cout << "Enter first name: ";
    cin >> p1.first_name;
    cout << "Enter last name: ";
    cin >> p1.last_name;
    cout << "Enter age: ";
    cin >> p1.age;
    cout << "Enter salary: ";
    cin >> p1.salary;

    // a'zo funksiyasi yordamida ma'lumotlarni ko'rsatish
    cout << "\nDisplaying Information." << endl;
    p1.display_info();

    return 0;
}

Chiqish

kod
Enter first name: Jane
Enter last name: Smith
Enter age: 27
Enter salary: 10000

Displaying Information.
First Name: Jane
Last Name: Smith
Age: 27
Salary: 10000

Shuningdek oʻqing