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.