您的位置:程序门 -> c/c++ -> c++ 语言



求助


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


求助[已结贴,结贴人:chengjin109]
发表于:2007-08-04 09:57:12 楼主
要求如下:类的对象的成员数据m_data在每个对象中有自己的数据   //不解?
class   sam
{
    char*   m_data;
public:
    sam();
    sam(sam   &s);
    sam   operator=(sam   &s);
    ~sam();
};
请问该如何实现该类的各成员函数?
发表于:2007-08-04 12:45:181楼 得分:15
请看一下effictive   c++   11节还是14节,这个题似乎是为了练习拷贝构造函数和assign   operator的
主要是体现copy   constructor和assign   operator的作用的
发表于:2007-08-04 12:51:542楼 得分:5
sam(){}
sam(sam   &s)
{
        if(this   ==   &s)
                return;
        m_data   =   s.m_data;
}            
sam   operator=(sam   &s)
{
        if(this   ==   &s)
                return   *this;
        m_data   =   s.m_data;
        return   *this;
}
~sam()
{
}
发表于:2007-08-04 12:52:553楼 得分:0
//   构造函数
sam()   {   m_data   =   0;}
//   析构函数
~sam()   {   delete   m_data;   m_data   =   0;}
sam(sam   &s)
{
if(   this   ==   &s   )
{
return;
}
if(   m_data   !=   0   )
{
delete   m_data;
//   然后将s中的成员函数拷贝到m_data中,具体的可以调用某个函数
strcpy(m_data,   s.m_data);
}
else
{
m_data   =   new   char[strlen(s.m_data)   +   1];
//   将s中的成员变量拷贝到m_data中,好像是调用strcpy?
strcpy(m_data,   s.m_data);
}
}
发表于:2007-08-04 12:56:564楼 得分:0
sam   operator=(sam   &s)
{
if(   this   ==   &s   )
{
return   *this;
}
if(   m_data   !=   0   )
{
delete   m_data;     //   先释放掉原有的内存
m_data   =   new   char[strlen(s.m_data   +   1)];         //申请新内存空间
//   然后将s中的成员函数拷贝到m_data中,具体的可以调用某个函数strcpy
strcpy(m_data,   s.m_data);
}
else
{
m_data   =   new   char[strlen(s.m_data)   +   1];
//   将s中的成员变量拷贝到m_data中,好像是调用strcpy?
strcpy(m_data,   s.m_data);
}
return   *this;
}
发表于:2007-08-04 12:59:205楼 得分:0
这段代码有误
sam(sam   &s)
{
if(   this   ==   &s   )
{
return;
}
if(   m_data   !=   0   )
{
delete   m_data;
//   这里需要添加一行
m_data   =   new   char[strlen(s.m_data)   +   1];
//   然后将s中的成员函数拷贝到m_data中,具体的可以调用某个函数
strcpy(m_data,   s.m_data);     //   你自己看一下strcpy会不会给你这个字符串添加\0,如果不添加自己就要手动添加了


快速检索

最新资讯
热门点击