把接口和实现分开的方法.
假定接口类为A,而将实现放在Impl类中,由于非指针类型成员变量必须和该成员类声明放在一起,而指针类型可以不这样做,因此必须将Impl成员指针作为A的成员变量,代码如下Impl.h 实现类的头/实现文件,可以看到里面实现了方法operator()
class Impl
{
public:
void operator()(int nData)
{
}
};
{
public:
void operator()(int nData)
{
}
};
A.h 接口类头文件,不须要包含实现类的头文件
A.cpp 接口类的实现,需要包含实现类的头文件class Impl;
class A
{
public:
A();
~A();
void operator()(int nData);
private:
Impl * impl;
};
class A
{
public:
A();
~A();
void operator()(int nData);
private:
Impl * impl;
};
#include "A.h"
#include "Impl.h"
A::A()
{
impl = new Impl;
}
A::~A()
{
delete impl;
}
void A::operator()(int nData)
{
(*impl)(nData);
}
Main.cpp 主函数,只需要包含接口类头文件即可,完全不需要知道实现类的任何东西#include "Impl.h"
A::A()
{
impl = new Impl;
}
A::~A()
{
delete impl;
}
void A::operator()(int nData)
{
(*impl)(nData);
}
#include "A.h"
void main()
{
A a;
a(0);
}
void main()
{
A a;
a(0);
}