class CDirectory : public CObject
{
DECLARE_SERIAL(CDirectory) //有了这句话后
CDirectory(); //这个构造函数还是私有的吗?
virtual ~CDirectory();public:
virtual void Serialize(CArchive&);
CDirectory (const CDirectory &dir);
CDirectory &operator=(const CDirectory &dir); CString m_strDir;
CString m_strAlias;
BOOL m_bAllowDownload;
BOOL m_bAllowUpload;
BOOL m_bAllowRename;
BOOL m_bAllowDelete;
BOOL m_bAllowCreateDirectory;
BOOL m_bIsHomeDir;
};//为什么下面这句话还能编译成功?它的构造构造函数不是private的吗?
CDirectory directory;
{
DECLARE_SERIAL(CDirectory) //有了这句话后
CDirectory(); //这个构造函数还是私有的吗?
virtual ~CDirectory();public:
virtual void Serialize(CArchive&);
CDirectory (const CDirectory &dir);
CDirectory &operator=(const CDirectory &dir); CString m_strDir;
CString m_strAlias;
BOOL m_bAllowDownload;
BOOL m_bAllowUpload;
BOOL m_bAllowRename;
BOOL m_bAllowDelete;
BOOL m_bAllowCreateDirectory;
BOOL m_bIsHomeDir;
};//为什么下面这句话还能编译成功?它的构造构造函数不是private的吗?
CDirectory directory;
#define DECLARE_DYNAMIC(class_name) \
public: \
static const CRuntimeClass class##class_name; \
static CRuntimeClass* PASCAL GetThisClass(); \
virtual CRuntimeClass* GetRuntimeClass() const; \#define _DECLARE_DYNAMIC(class_name) \
public: \
static CRuntimeClass class##class_name; \
static CRuntimeClass* PASCAL GetThisClass(); \
virtual CRuntimeClass* GetRuntimeClass() const; \#else
#define DECLARE_DYNAMIC(class_name) \
public: \
static const CRuntimeClass class##class_name; \
virtual CRuntimeClass* GetRuntimeClass() const; \#define _DECLARE_DYNAMIC(class_name) \
public: \
static CRuntimeClass class##class_name; \
virtual CRuntimeClass* GetRuntimeClass() const; \#endif// not serializable, but dynamically constructable
#define DECLARE_DYNCREATE(class_name) \
DECLARE_DYNAMIC(class_name) \
static CObject* PASCAL CreateObject();#define _DECLARE_DYNCREATE(class_name) \
_DECLARE_DYNAMIC(class_name) \
static CObject* PASCAL CreateObject();#define DECLARE_SERIAL(class_name) \
_DECLARE_DYNCREATE(class_name) \
AFX_API friend CArchive& AFXAPI operator>>(CArchive& ar, class_name* &pOb);看明白了么?