我创建了两个类,一个是Phone,一个是Person。
Phone类中,我没有提供默认的构造函数。
请问老师:
1.为什么在Person类中,创建一个Phone类时,编译器没有报错?
2.为什么在函数test01()中创建一个Phone类时,编译器会提示“Phone类不存在默认构造函数”?
我创建了两个类,一个是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()
{
//
}