空関数の実体はヘッダに書くべし |
|
何もしない関数というのは、たまに登場してしまうと思います。 |
|
List1 |
|
test.h |
class CTest { public: CTest(); virtual ~CTest(); void func(); }; |
test.cpp |
CTest::CTest() { } CTest::~CTest() { } void CTest::func() { ::AfxMessageBox( _T("func") ); } |
main.cpp |
#include "test.h" main() { CTest test; test.func(); } |
リスト1の CTest のコンストラクタとデストラクタは何もしてません。 |
|
List2 |
|
test.h |
class CTest { public: CTest(){} // 空関数の実体も記述 virtual ~CTest(){} // 空関数の実体も記述 void func(); }; |
test.cpp |
/* .cpp には実体を書かない。 CTest::CTest() { } CTest::~CTest() { } */ void CTest::func() { ::AfxMessageBox( _T("func") ); } |
main.cpp |
#include "test.h" main() { CTest test; test.func(); } |
リスト2のようにすることで、main() での処理は、 |
|
List3 |
|
test.h |
class CTest { public: std::string m_str; public: CTest(){} // 空関数の実体も記述 virtual ~CTest(){} // 空関数の実体も記述 void func(); }; |
こういう場合は、m_strを初期化する必要があるので、コンパイラは、CTestのコンストラクタを端折ることはしません。 |
|
List4 | |
test.h |
class CTest { public: virtual void func(){}; // 空関数の実体が記述されていても }; |
main.cpp |
void function(CTest *p) { p->func(); // ここではちゃんとコールする } |
まとめ。 |
前のページ メンバ変数の参照は控えめにすべし |
コンテンツのトップ |
次のページ "経過時間"の判断方法の穴に落ちるべからず |