zds212 发表于 2021-5-5 13:33

如果加上解析我就运行有个断点, 求大佬指教

本帖最后由 zds212 于 2021-5-7 22:32 编辑

#include <iostream>
using namespace std;

class mint
{
public:
      mint(int num)
      {
                number = new int(num);
      }
      mint& operator=(mint &p)
      {
                if (number != NULL)
                {
                        delete number;
                        number = NULL;
                }
                number = new int(*p.number);
                return *this;
      }

      int *number;
};
ostream& operator<<(ostream& cout,mint p)
{
      cout << *p.number ;
      return cout;
}
void text01()
{
      mint p1(5);
      mint p2(6);
      mint p3 = p2=p1;
      cout << p3 <<""<<p2<<""<<p1<<endl;
}
int main()
{
      text01();
      system("pause");
      return 0;
}

zds212 发表于 2021-5-5 13:35

如果加上下面代码解析的时候回出现问题。
~mint()
{
if(number!=NULL)
   {
      detele number;
      number=NULL;
   }
}

zds212 发表于 2021-5-5 13:36

栈的变量也另外开辟了。有点混乱了。

苏紫方璇 发表于 2021-5-5 14:46

mint p3 = p2=p1;这里,p3和p2地址一样,所以后面delete的时候,p2已经delete一次了,再delete p3就会报错

zds212 发表于 2021-5-5 14:47

苏紫方璇 发表于 2021-5-5 14:46
mint p3 = p2=p1;这里,p3和p2地址一样,所以后面delete的时候,p2已经delete一次了,再delete p3就会报错

哦哦哦,多谢大佬指点。

苏紫方璇 发表于 2021-5-5 14:56

本帖最后由 苏紫方璇 于 2021-5-5 15:01 编辑

zds212 发表于 2021-5-5 14:47
哦哦哦,多谢大佬指点。
ostream& operator<<(ostream& cout, mint &p)
这里少了一个&

zds212 发表于 2021-5-5 15:05

苏紫方璇 发表于 2021-5-5 14:56
zds212 发表于 2021-5-5 14:47
哦哦哦,多谢大佬指点。
ostream& operator

嗯嗯。 我试试

zds212 发表于 2021-5-5 15:17

{:1_893:} 我去看书,不知道怎么解决。

zds212 发表于 2021-5-5 19:32

#include<iostream>
using namespace std;

//赋值运算符重载
class person
{
public:
        person(int age)
        {
                m_age = new int(age);
        }
        ~person()
        {
                if (m_age != NULL)
                {
                        delete m_age;
                        m_age = NULL;
                }
        }
        person& operator=(person &p)
        {
                //深拷贝
                if (m_age != NULL)
                {
                        delete m_age;
                        m_age = NULL;
                }
                m_age=new int(*p.m_age);
                return *this;
        }
        int* m_age;
};

void test01()
{
        person p1(5);
        person p2(20);
        person p3(30);
        p1=p3 = p1=p2;
        cout << *p1.m_age << endl;
}
int main()
{
        test01();
        system("pause");
        return 0;
}

zds212 发表于 2021-5-5 19:33

重新写了一下。 解决了。 多谢苏紫方璇论坛大牛帮忙!
页: [1]
查看完整版本: 如果加上解析我就运行有个断点, 求大佬指教