C++ 在类中创建类

img

img

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

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

(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()
{
    //
}

1.类本来就允许嵌套
2.你根本没有创建类,你只是定义了一个对象,类型是phone
3.你的phone类没有提供无参的构造函数,所以必须使用new phone(name)来调用有参的构造函数
4.person类里面正常来说也应该报错,这应该是编译器bug

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632