昨日自分のデスクトップPCを漁ってたら、昔作ったテストプログラムが出てきたので載せてみる。
一風変わったサンプルになってると思います。
C++のメンバ関数は通常のインスタンス用の他にconstオブジェクト用のメンバ関数を作ることができる。
実はconst以外にもvolatileとconst volatileも専用のメンバ関数を作ることができる。
サンプルソース
#使用は自己責任で!
#include <iostream> struct Test { // 通常のメンバ関数 void func() { std::cout << "void Test::func()" << std::endl; } // constメンバ関数 void func() const { std::cout << "void Test::func() const" << std::endl; } // volatileメンバ関数 void func() volatile { std::cout << "void Test::func() volatile" << std::endl; } // const volatileメンバ関数 void func() const volatile { std::cout << "void Test::func() const volatile" << std::endl; } }; void main() { Test t1; t1.func(); const Test t2; t2.func(); volatile Test t3; t3.func(); const volatile Test t4; t4.func(); } // EOF
出力例
void Test::func() void Test::func() const void Test::func() volatile void Test::func() const volatile
オブジェクトの種類によって呼び出されるメンバ関数が変わってくる。
変わってくるが、volatileのオブジェクトを作るパターンがそうそう無いと思うので参考までに。。。
volatileはともかくconst volatileなんで、外部で書き換わる可能性のある読み込み専用オブジェクトでしょ?
CPUの読み込み専用ポートとかじゃないと使わないんじゃないのって思います^^;