#ifndef _i_hello_h_ #define _i_hello_h_ // 提供者が作成し、ユーザに公開する、Chello の interface // <<interface>> // 前方参照 // ユーザには specification は公開しない class Chello ; // 操作 : プロトタイプ // Chello の specification は変更される可能性があるので、 // Chello のメンバを直接使用しないで済むような interface を定義 Chello* NewHello(void) ; void Delete(Chello* hello) ; void greet(Chello* hello) ; #endif /* _i_hello_h_ */
#ifndef _c_hello_h_ #define _c_hello_h_ // 提供者が作成する、ユーザには非公開の、Chello の specification #include <i_hello.h> // <<imprementation>> <<specification>> class Chello{ public: void Delete(void) ; void greet(void) ; } ; #endif /* _c_hello_h_ */
// 提供者が作成する、Chello の body と interface の実装 #include <stdio.h> #include "c_hello.h" // <<imprementation>> <<body>> void Chello::Delete(void){ delete this ; } void Chello::greet(void){ printf("Hello, World!\n") ; } // 操作 : 実体 Chello* NewHello(void){ return new Chello ; } void Delete(Chello* hello){ hello->Delete() ; } void greet(Chello* hello){ hello->greet() ; }
// ユーザが作成する、Chello のメンバを直接使用していないファイル。 #include <i_hello.h> // Chello の specification から独立。 // (specification が変更されても 再コンパイルの必要無し) int main(void) { Chello* hello = NewHello() ; greet(hello) ; Delete(hello) ; return 0 ; }