Skip to Content
21st Century C, 2nd Edition
book

21st Century C, 2nd Edition

by Ben Klemens
May 2025
Intermediate to advanced
408 pages
5h 55m
Japanese
O'Reilly Media, Inc.
Content preview from 21st Century C, 2nd Edition

第11章 オブジェクト指向プログラミング C言語によるオブジェクト指向プログラミング

この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com

私たちは複雑な考えをシンプルに表現することを好む。

...

我々はフラットなフォームのためにある

幻想を破壊し、真実を明らかにするからだ。

ル・ティグレ『自由大学でのスライドショー

C言語でも他の言語でも、典型的なライブラリの一般的な形式を以下に示す:

  • ライブラリが扱う分野の主要な側面を表す小さなデータ構造のセット。

  • これらのデータ構造を操作する一連の関数(しばしばインタフェース関数と呼ばれる)。

たとえばXMLライブラリーは、XMLドキュメントを表す構造体と、おそらくそのドキュメントのビューを持ち、さらにデータ構造とディスク上のXMLファイルとの間を行き来したり、構造体に要素をクエリしたりするための関数をたくさん持っている。データベース・ライブラリには、データベースとの通信状態を表す構造体と、テーブルを表すデータ構造、それにデータベースと通信したり、データベースから送られてくるデータを解析したりするための関数がある。

これはプログラミングやライブラリを構成する上で、極めて賢明な方法である。それは、作者が目下の問題に適した名詞と動詞で概念を表すことができる手段である。

オブジェクト指向プログラミング(OOP)の正確な定義を説明することで時間を浪費する(そして炎上する)のは避けたいが、オブジェクト指向ライブラリの説明を読めば、私たちが何を目指しているかがわかるだろう。

ある機能がOOPに不可欠だと主張する専門家に対し、その機能をOOPの核心から逸脱したものと見なす専門家も発見されるだろう。1とはいえ、ここでは基本的な構造体+関数オブジェクトを拡張した、ごく一般的なものをいくつか紹介しよう:

  • 継承とは、構造体を拡張して新しい要素を追加することである。

  • 仮想関数。クラス内のどのオブジェクトに対してもデフォルトの振る舞いを持つが、オブジェクト(または継承ツリー上のその子孫)の異なるインスタンスに対して特定の振る舞いを持つことができる。

  • 構造体の要素をプライベートとパブリックに分けるなど、スコープを細かく制御する。

  • 演算子のオーバーロード。同じ演算子でも、演算する型によって意味が変わる。

  • 参照カウント。関連するリソースがすべて使用されなくなった場合にのみ、オブジェクトを解放することができる。

参照カウントは基本的にカウンタを維持する必要があり、関数(演算子ではない)のオーバーロードはこの目的のために設計された_Generic キーワードを使用し、仮想関数はオプションで代替関数の key/value テーブルにバックアップされたディスパッチ関数を介して実装することができる。

基本的なstruct-plus-functionsオブジェクトに対するこれらの拡張が非常に簡単で、数行のコードで済むのであれば、なぜC言語で書いている作者たちはいつもそれを使わないのだろうか?

言語と認知を結びつけるサピア=ウォーフ仮説は、さまざまな形で述べられている。heshehisherのような性別を示す記号を避けて人についての文章を作るのは、しばしば厄介だからだ。C言語では、他の言語以上にメモリ割り当てについて考える必要がある(そのため、C言語以外のユーザからは、C言語のコードはメモリをひたすらいじくり回すだけのものだという固定観念が生まれるかもしれない)。広範なスコープ演算子を実装している言語では、変数がいつ、どのオブジェクトに見えるのかを正確に考えなければならない。たとえその言語が技術的には、オブジェクトのメンバをすべてpublicと宣言してコードをコンパイルすることを許可していたとしても、誰かがあなたを怠け者呼ばわりし、きめ細かなスコープについて考えなければならない言語周辺の規範を思い出させるだろう。 ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

Learn C Programming - Second Edition

Learn C Programming - Second Edition

Jeff Szuhay
Tiny C Projects

Tiny C Projects

Daniel Gookin

Publisher Resources

ISBN: 9798341650848