CMyObject a="ABCD";
a="EFGH";
char* str=a;为了使以上与局部产生编译错误,请问CMyObject函数头应该如何实现?

解决方案 »

  1.   

    //-----------CMkstruct.cpp-----------------
    #include "stdafx.h"         //这里加了没
    #include "mkStruct.h"CMkStruct::CMkStruct(void)
    {
    }CMkStruct::~CMkStruct()
    {
    } int CMkStruct::getValue()
    {
    return event;
    }
    void CMkStruct::setValue(int m)
    {
    event = m;
    }//----------CMkStruct.h------------
    class CMkStruct
    {
    private:
    int   event;
    public:
    CMkStruct(void);
    ~CMkStruct(void); int getValue(void);
             void setValue(int m);
    };----------------------
    CMkStruct myStruct;
    myStruct.setValue(10);
    myStruct.getValue();
      

  2.   

    我想问的是该如何实现CMyObject,为了让以上语句编译不产生错误
      

  3.   

    第一二句我可以实现,第三句不知道如何实现,推荐使用拷贝构造函数,我可以给你个DEMO,
    如果你需要。
      

  4.   

    CMyObject
    {
    ...
    CMyObject(const char*);//CMyObject a="ABCD";
    CMyObject& operator=(const char*);//a="EFGH";
    operator char*() const;//char* str=a;
    }
      

  5.   

    第一句的实现,注意初值要用一个参数的构造函数实现
    CMyObject(const char *str);
    第二句的实现,注意这时候要重载等号,返回值应该是this指向的对象
    const CMyObject& operator =(const char *str);
    第三句的实现,这时候要重载char*操作符,返回值是char*
              operator char*() const;
      

  6.   

    看一下CString类的源代码就知道了
      

  7.   

    class CA
    {
    public:
    CA(){}
    CA(char * p){str=p;}
    ~CA(){}
    public:
    void operator = (char*p){str=p;str.MakeReverse();}
    public:
    CString str;
    };...
    {
    CA a("abcd");//构造函数
    CA b="bcde";//构造函数
    CA c;
    c="ABCD";//没有operator=则是构造函数,有operator=则operator=
    }
    第三句不可能实现