class CPtlLibMag;class CPtlLibrary
{
friend class CPtlLibMag;  //这里我不会
CString m_szLibPath;
CString m_szFileName;
public:
CPtlLibrary(LPCSTR lpszLibPath);
~CPtlLibrary();
};typedef CTypedPtrList<CPtrList, CPtlLibrary*> CPtlLibList;  //这里我也不会class CPtlLibMag
{
public:
CPtlLibMag();
~CPtlLibMag();
public:
static CPtlLibMag* GetPtlLibMag();  //这里还是不会
private:
static CPtlLibMag m_sPtlLibMag;   //不会不会,全都不会,晕死
CPtlLibList m_ptrPtlLibrary;
};

解决方案 »

  1.   

    呵呵,有些是比较基础的,但是基于C++与Object Pascal的区别,并非所有的C++都可以很好实现。
    针对你的问题如下:class CPtlLibMag;class CPtlLibrary
    {
    friend class CPtlLibMag;  //这里我不会
    /*
    在C++中,有友元的概念, 但是在OP(Object Pascal以下同), 没有这样的概念.但是作为补充(我认为是补充,其实Borland为何,偶不清楚了), OP对于同一单元的类, 所有成员都是可以访问的,即使是private成员.即: 针对C++中的友元, 在OP中要使用其它方式实现.个人为友元: 友元对OOP而言, 是多余的, 就象Goto语句对于结构化流程一样. 可以通过更合理的设计来避免.
    */
    CString m_szLibPath;
    CString m_szFileName;
    public:
    CPtlLibrary(LPCSTR lpszLibPath);
    ~CPtlLibrary();
    };typedef CTypedPtrList<CPtrList, CPtlLibrary*> CPtlLibList;  //这里我也不会
    /***
    这里只是一个类型定义, 函数类型的类型.不过, 这里麻烦一点的是,这个函数在C++中是通过模板实现的. OP不支持模板, 所以在OP中
    可能要定义多个函数.
    ***/class CPtlLibMag
    {
    public:
    CPtlLibMag();
    ~CPtlLibMag();
    public:
    static CPtlLibMag* GetPtlLibMag();  //这里还是不会
    /****
    OP不支持static 变量, 但可以通过在类实现单元中定义单元变量实现.
    ****/
    private:
    static CPtlLibMag m_sPtlLibMag;   //不会不会,全都不会,晕死
    /****
    OP不支持static 变量, 但可以通过在类实现单元中定义单元变量实现.
    ****/ CPtlLibList m_ptrPtlLibrary;
    };
      

  2.   

    pascal没有友元的概念,不过只要两个类在同一个文件的话,这两个类就可以相互访问对方的类的所有成员
      

  3.   

    谢谢,对于这一点 “OP对于同一单元的类, 所有成员都是可以访问的”了解了。对于typedef CTypedPtrList<CPtrList, CPtlLibrary*> CPtlLibList; 看这样行不行?
    TPtlLibrary = class
    ...
    end;Type PPtlLibrary = ^TPtlLibrary; 然后使用用TList来实现
      

  4.   

    顺带问一下,在定义类的时候,如果不指名基类,那么默认就为TObject ?