C ++ Veri Yapıları

C / C ++ dizileri, aynı türden birkaç veri öğesini birleştiren değişkenleri tanımlamanıza izin verir, ancak structure farklı türdeki veri öğelerini birleştirmenize izin veren başka bir kullanıcı tanımlı veri türüdür.

Yapılar bir kaydı temsil etmek için kullanılır, farz edelim ki kitaplarınızı bir kütüphanede takip etmek istiyorsunuz. Her kitapla ilgili aşağıdaki öznitelikleri izlemek isteyebilirsiniz -

  • Title
  • Author
  • Subject
  • Kitap kimliği

Bir Yapının Tanımlanması

Bir yapıyı tanımlamak için struct ifadesini kullanmanız gerekir. Struct deyimi, programınız için birden fazla üyesi olan yeni bir veri türünü tanımlar. Struct ifadesinin biçimi şudur -

struct [structure tag] {
   member definition;
   member definition;
   ...
   member definition;
} [one or more structure variables];

structure tagisteğe bağlıdır ve her üye tanımı, int i gibi normal bir değişken tanımıdır; veya float f; veya başka herhangi bir geçerli değişken tanımı. Yapının tanımının sonunda, son noktalı virgülden önce, bir veya daha fazla yapı değişkeni belirtebilirsiniz, ancak bu isteğe bağlıdır. Kitap yapısını şu şekilde beyan edersiniz:

struct Books {
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
} book;

Yapı Üyelerine Erişim

Bir yapının herhangi bir üyesine erişmek için, member access operator (.). Üye erişim operatörü, yapı değişkeni adı ile erişmek istediğimiz yapı üyesi arasında bir süre olarak kodlanır. Kullanırdınstructyapı tipindeki değişkenleri tanımlamak için anahtar kelime. Aşağıda yapının kullanımını açıklamak için örnek verilmiştir -

#include <iostream>
#include <cstring>
 
using namespace std;
 
struct Books {
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
};
 
int main() {
   struct Books Book1;        // Declare Book1 of type Book
   struct Books Book2;        // Declare Book2 of type Book
 
   // book 1 specification
   strcpy( Book1.title, "Learn C++ Programming");
   strcpy( Book1.author, "Chand Miyan"); 
   strcpy( Book1.subject, "C++ Programming");
   Book1.book_id = 6495407;

   // book 2 specification
   strcpy( Book2.title, "Telecom Billing");
   strcpy( Book2.author, "Yakit Singha");
   strcpy( Book2.subject, "Telecom");
   Book2.book_id = 6495700;
 
   // Print Book1 info
   cout << "Book 1 title : " << Book1.title <<endl;
   cout << "Book 1 author : " << Book1.author <<endl;
   cout << "Book 1 subject : " << Book1.subject <<endl;
   cout << "Book 1 id : " << Book1.book_id <<endl;

   // Print Book2 info
   cout << "Book 2 title : " << Book2.title <<endl;
   cout << "Book 2 author : " << Book2.author <<endl;
   cout << "Book 2 subject : " << Book2.subject <<endl;
   cout << "Book 2 id : " << Book2.book_id <<endl;

   return 0;
}

Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

Book 1 title : Learn C++ Programming
Book 1 author : Chand Miyan
Book 1 subject : C++ Programming
Book 1 id : 6495407
Book 2 title : Telecom Billing
Book 2 author : Yakit Singha
Book 2 subject : Telecom
Book 2 id : 6495700

Fonksiyon Bağımsız Değişkenleri Olarak Yapılar

Bir yapıyı, başka bir değişken veya işaretçi ilettiğinizde çok benzer bir şekilde işlev bağımsız değişkeni olarak iletebilirsiniz. Yapı değişkenlerine yukarıdaki örnekte eriştiğiniz şekilde erişirsiniz -

#include <iostream>
#include <cstring>
 
using namespace std;
void printBook( struct Books book );

struct Books {
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
};
 
int main() {
   struct Books Book1;        // Declare Book1 of type Book
   struct Books Book2;        // Declare Book2 of type Book
 
   // book 1 specification
   strcpy( Book1.title, "Learn C++ Programming");
   strcpy( Book1.author, "Chand Miyan"); 
   strcpy( Book1.subject, "C++ Programming");
   Book1.book_id = 6495407;

   // book 2 specification
   strcpy( Book2.title, "Telecom Billing");
   strcpy( Book2.author, "Yakit Singha");
   strcpy( Book2.subject, "Telecom");
   Book2.book_id = 6495700;
 
   // Print Book1 info
   printBook( Book1 );

   // Print Book2 info
   printBook( Book2 );

   return 0;
}
void printBook( struct Books book ) {
   cout << "Book title : " << book.title <<endl;
   cout << "Book author : " << book.author <<endl;
   cout << "Book subject : " << book.subject <<endl;
   cout << "Book id : " << book.book_id <<endl;
}

Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

Book title : Learn C++ Programming
Book author : Chand Miyan
Book subject : C++ Programming
Book id : 6495407
Book title : Telecom Billing
Book author : Yakit Singha
Book subject : Telecom
Book id : 6495700

Yapılara İşaretçiler

İşaretçileri başka bir değişkene aşağıdaki gibi tanımladığınız gibi, yapılara çok benzer şekilde tanımlayabilirsiniz -

struct Books *struct_pointer;

Şimdi, bir yapı değişkeninin adresini yukarıda tanımlanan işaretçi değişkeninde saklayabilirsiniz. Bir yapı değişkeninin adresini bulmak için, & operatörünü yapının adının önüne aşağıdaki gibi yerleştirin -

struct_pointer = &Book1;

Bir yapının üyelerine, o yapının bir işaretçisi kullanarak erişmek için, -> operatörünü aşağıdaki gibi kullanmanız gerekir -

struct_pointer->title;

Yapı işaretçisini kullanarak yukarıdaki örneği yeniden yazalım, bunun sizin için kavramı anlamanızın kolay olacağını umalım -

#include <iostream>
#include <cstring>
 
using namespace std;
void printBook( struct Books *book );

struct Books {
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
};
int main() {
   struct Books Book1;        // Declare Book1 of type Book
   struct Books Book2;        // Declare Book2 of type Book
 
   // Book 1 specification
   strcpy( Book1.title, "Learn C++ Programming");
   strcpy( Book1.author, "Chand Miyan"); 
   strcpy( Book1.subject, "C++ Programming");
   Book1.book_id = 6495407;

   // Book 2 specification
   strcpy( Book2.title, "Telecom Billing");
   strcpy( Book2.author, "Yakit Singha");
   strcpy( Book2.subject, "Telecom");
   Book2.book_id = 6495700;
 
   // Print Book1 info, passing address of structure
   printBook( &Book1 );

   // Print Book1 info, passing address of structure
   printBook( &Book2 );

   return 0;
}

// This function accept pointer to structure as parameter.
void printBook( struct Books *book ) {
   cout << "Book title : " << book->title <<endl;
   cout << "Book author : " << book->author <<endl;
   cout << "Book subject : " << book->subject <<endl;
   cout << "Book id : " << book->book_id <<endl;
}

Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

Book title : Learn C++ Programming
Book author : Chand Miyan
Book subject : C++ Programming
Book id : 6495407
Book title : Telecom Billing
Book author : Yakit Singha
Book subject : Telecom
Book id : 6495700

Typedef Anahtar Kelime

Yapıları tanımlamanın daha kolay bir yolu vardır veya oluşturduğunuz türleri "takma ad" olarak kullanabilirsiniz. Örneğin -

typedef struct {
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
} Books;

Artık, struct anahtar sözcüğünü kullanmadan Kitap türündeki değişkenleri doğrudan tanımlamak için Kitapları kullanabilirsiniz . Örnek aşağıdadır -

Books Book1, Book2;

Kullanabilirsiniz typedef yapısal olmayanlar için anahtar kelime ve aşağıdaki -

typedef long int *pint32;
 
pint32 x, y, z;

x, y ve z'nin tümü uzun inçlere işaret eder.