anancba 2022-12-07 16:33 采纳率: 100%
浏览 19
已结题

C++ 在类中创建类

img

img

我创建了两个类,一个是Phone,一个是Person。
Phone类中,我没有提供默认的构造函数。

请问老师:
1.为什么在Person类中,创建一个Phone类时,编译器没有报错?
2.为什么在函数test01()中创建一个Phone类时,编译器会提示“Phone类不存在默认构造函数”?

  • 写回答

3条回答 默认 最新

  • 关注

    (1)第一个问题
    因为你在Person类中声明phone类对象时,只是声明了一个类对象,但是这个对象没有实际创建,所以编译器没有报错。
    如果你在test中声明一个Person p;的对象,也是会报错的。因为Person类也没有提供无参构造函数,并且,p的m_Phone属性没有无参构造函数。
    (2)第二个问题
    在test01中声明变量phone时,会调用Phone类的无参构造函数,但是你没有提供无参构造函数,所以会报错。

    修改方法,使用指针,或者提供无参构造函数,参考如下:

    
    #include <iostream>
    #include <string>
    using namespace std;
    class Phone
    {
    public:
        Phone(string name)
        {
            m_PhoneName = name;
            cout << "phone构造" << endl;
        }
        ~Phone()
        {
            cout << "phone 析构" << endl;
        }
        string m_PhoneName;
    };
    
    class Person
    {
    public:
        Person() { m_Phone = 0; m_Name = ""; }
        string m_Name;
        Phone* m_Phone;
    };
    
    void test01()
    {
        Phone* phone;
        phone = new Phone("1111");
    }
    void test02()
    {
        Person* p = new Person();
        p->m_Phone = new Phone("2222");
    }
    int main()
    {
        //
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月15日
  • 已采纳回答 12月7日
  • 创建了问题 12月7日

悬赏问题

  • ¥15 基于单片机数字电压表电路组成及框图
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line