|
空関数の実体はヘッダに書くべし |
|
|
何もしない関数というのは、たまに登場してしまうと思います。 |
|
|
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(); // ここではちゃんとコールする
}
|
|
まとめ。 |
|
|
前のページ メンバ変数の参照は控えめにすべし |
コンテンツのトップ |
次のページ "経過時間"の判断方法の穴に落ちるべからず |




