C/C++プログラミング入門 – C++の構造体

注意: この記事は1年以上前に掲載されたものです。情報が古い場合がありますのでお気を付け下さい。

C/C++プログラミング入門 – C言語の構造体ではC言語の構造体について説明を行った。本記事ではそれについでC++言語における構造体とクラスについて説明を行いたい。

C++でも構造体はC言語の構造体と同じように使える

まず、C++においても、構造体そのものはC言語の構造体とほぼ同様の使い方ができる。したがって、C/C++プログラミング入門 – C言語の構造体で提示したサンプルコードも基本的にはC++としてコンパイル・実行することも可能である。また、C++においては、structオブジェクトを宣言・定義する際にstructの表記を省略することができる1

C++の構造体とC言語の構造体の違いについて

C++の構造体ではC言語の構造体から拡張されている部分があり、関数も定義することができるようになっている。したがって、以下のような書き方もできるようになっている。

サンプルコード

[code lang=”cpp”]#include <cstdio>
#include <cstring>
#include <cstdlib>

struct book_info {
int identifier;
char name[100];
char author[100];
char publisher[100];
void print_book_information() {
printf("=====Book information=====\n");
printf("Identifier: %d\n", identifier);
printf("Name : %s\n", name);
printf("Author : %s\n", author);
printf("Publisher : %s\n", publisher);
}
};

int main() {
// パターン1
book_info book1;
book1.identifier = 1;
strncpy(book1.name, "Foo", 100);
strncpy(book1.author, "John Smith", 100);
strncpy(book1.publisher, "Foo Books", 100);
book1.print_book_information();

// パターン2
book_info book2 = {2, "Bar", "Jane Smith", "Bar books"};
book2.print_book_information();

return EXIT_SUCCESS;
}[/code]

解説

上記のサンプルコードは基本的にはC/C++プログラミング入門 – C言語の構造体とほぼ変わらないが、唯一違う点が構造体内に関数が定義されている点である。ここでは簡単に説明するにとどめるが、C++における構造体は、実質的にはのちほど説明する予定である「クラス」と同一のものであるからである2

ここでは割愛するが、C++における構造体は実質的にはC++におけるクラスと同様の使い方ができることになる。従って、C++のクラスの説明をのちの機会に行う予定だが、C++の構造体でもクラスと同様のことが行えることは念頭に入れると良いだろう。

最後に

今回はC++における構造体の説明を簡単に行った。C++における構造体はC言語からかなり拡張されているのみならず、クラスとしての側面もあるため、気をつけなければならないことも少なくない。

次回はクラスについて説明を行いたいと考えている。

ウェブマスター。本ブログでITを中心にいろいろな情報や意見などを提供しています。ご用の方はコメントかコンタクトフォームにて。
  1. C言語ではtypedefが必要 []
  2. 大きな違いはデフォルトでどこから変数あるいは関数にアクセスできるかである。 []