鱼C论坛

 找回密码
 立即注册
查看: 1155|回复: 1

深拷贝于浅拷贝的问题

[复制链接]
发表于 2021-11-5 10:00:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
以下代码哪里出现了问题
编译出来提示const char to char

#include<iostream>
#include<string>

using namespace std;

class Person
{
    public:

    Person(int age ,char name)
    {
        m_age = age;
        m_name = new char(name);
        cout << "Person的构造函" << endl;
    }

//  Person(const Person& p)
//  {
    //  cout << "拷贝构造函数" << endl;
    //  m_age = p.m_age;
//      m_height = new int(*p.m_height);
//  }

    ~Person()
    {
        if(m_name != NULL)
        {
            delete m_name;
            m_name = NULL;
        }
        cout << "Person的析构函数" << endl;
    }

    int m_age;
    char *m_name;
};

void test1()
{
    Person p1(18 , "zy");
    cout << "年龄:" << p1.m_age << "名字:" << *p1.m_name <<  endl;
    Person p2(p1);
    cout << "年龄" << p2.m_age << "名字:" << *p2.m_name << endl;
}      

int main(int argc , char **argv)
{
    test1();
    return 0;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-11-5 11:58:56 | 显示全部楼层
  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>

  4. using namespace std;

  5. class Person {
  6.   public:
  7.     // Person(int age ,char name)
  8.     Person(int age, const char *name) {
  9.         m_age = age;
  10.         // m_name = new char(name);
  11.         m_name = new char[strlen(name) + 1];
  12.         m_name[0] = '\0'; strcpy(m_name, name);
  13.         cout << "Person的构造函" << endl;
  14.     }

  15.     //  Person(const Person& p)
  16.     //  {
  17.     //  cout << "拷贝构造函数" << endl;
  18.     //  m_age = p.m_age;
  19.     //      m_height = new int(*p.m_height);
  20.     //  }
  21.     Person(const Person &rhs) {
  22.         m_age = rhs.m_age;
  23.         m_name = new char[strlen(rhs.m_name) + 1];
  24.         m_name[0] = '\0'; strcpy(m_name, rhs.m_name);
  25.     }

  26.     ~Person() {
  27.         if(m_name != NULL) {
  28.             //delete m_name;
  29.             delete[] m_name;
  30.             m_name = NULL;
  31.         }
  32.         cout << "Person的析构函数" << endl;
  33.     }

  34.     int m_age;
  35.     char *m_name;
  36. };

  37. void test1() {
  38.     Person p1(18, "zy");
  39.     //cout << "年龄:" << p1.m_age << "名字:" << *p1.m_name << endl;
  40.     cout << "年龄:" << p1.m_age << "名字:" << p1.m_name << endl;
  41.     Person p2(p1);
  42.     //cout << "年龄" << p2.m_age << "名字:" << *p2.m_name << endl;
  43.     cout << "年龄" << p2.m_age << "名字:" << p2.m_name << endl;
  44. }

  45. int main(int argc, char **argv) {
  46.     test1();
  47.     return 0;
  48. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-25 17:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表