Ryan_Li 发表于 2020-11-7 17:12:34

在A类成员中添加另一个B类的对象时,不可以在A类初始化的时候给B的一个成员赋值吗

#include <iostream>
using namespace std;

class Phone{
public:
        Phone(string Name){
                cout<<"Phone的构造函数调用" <<endl;
                m_Pname = Name;
        }
        string m_Pname;
};

class Person
{       
public:
        Person(string pname,string Pname)
        {                                                      //这里报错了
                m_Pname = pname;
                m_Phone.m_Pname = Pname;    //不可以在Person类初始化的时候给Phone的一个成员m_Pname赋值吗
        }
        string m_Name;
        Phone m_Phone;
};


void test01(){
        Person p1("XXX","Iphone 12 pro max");
        cout<<"姓名:"<<p1.m_Name<<endl;
        cout<<"所用手机:"<<p1.m_Phone.m_Pname<<endl;
}

int main(){
        test01();
        system("pause");
        return 0;
}

Ryan_Li 发表于 2020-11-7 17:14:06

17        2        D:\学习\C++\未命名2.cpp        no matching function for call to 'Phone::Phone()'   报错原因如上

sunrise085 发表于 2020-11-7 17:30:11

两个问题,给你写了注释
#include <iostream>
using namespace std;

class Phone{
public:
      Phone(string Name){
                cout<<"Phone的构造函数调用" <<endl;
                m_Pname = Name;
      }
      Phone(){}//第二、你在class Person中第20行写的形式这里需要有这个默认构造函数否则就会出错。
      string m_Pname;
};

class Person
{      
    public:
      Person(string pname,string Pname)
      {                                                      //这里报错了
            m_Name = pname;          //第一、这里拼写错误
            m_Phone.m_Pname = Pname;    //不可以在Person类初始化的时候给Phone的一个成员m_Pname赋值吗
      }
      string m_Name;
      Phone m_Phone;
};

void test01(){
    Person p1("XXX","Iphone 12 pro max");
    cout<<"姓名:"<<p1.m_Name<<endl;
    cout<<"所用手机:"<<p1.m_Phone.m_Pname<<endl;
}

int main(){
    test01();
    system("pause");
    return 0;
}

永恒的蓝色梦想 发表于 2020-11-7 17:58:12

#include <iostream>
using namespace std;

class Phone {
public:
    Phone(string Name) {
      cout << "Phone的构造函数调用" << endl;
      m_Pname = Name;
    }
    string m_Pname;
};

class Person
{
public:
    string m_Name;
    Phone m_Phone;

    Person(string pname, string Pname) :m_Phone(Phone(Pname)) {
      m_Name = pname;
    }
};


void test01() {
    Person p1("XXX", "Iphone 12 pro max");
    cout << "姓名:" << p1.m_Name << endl;
    cout << "所用手机:" << p1.m_Phone.m_Pname << endl;
}

int main() {
    test01();
    system("pause");
    return 0;
}

Ryan_Li 发表于 2020-11-9 14:06:32

sunrise085 发表于 2020-11-7 17:30
两个问题,给你写了注释

我懂了,写了有参构造以后不提供默认构造 ,编译器在一个类里创建另一个类对象的时候会报错,对吗

sunrise085 发表于 2020-11-9 14:41:54

Ryan_Li 发表于 2020-11-9 14:06
我懂了,写了有参构造以后不提供默认构造 ,编译器在一个类里创建另一个类对象的时候会报错,对吗

差不多是这个意思。前半句是对的,后半句不对。
没有了默认构造函数,并不是不能在一个类中创建另一个类的对象,而是不能像你写的那样创建另一个类的对象了。创建类对象就必须有对应的参数,可以像三楼那样写。

Ryan_Li 发表于 2020-11-10 10:08:13

sunrise085 发表于 2020-11-9 14:41
差不多是这个意思。前半句是对的,后半句不对。
没有了默认构造函数,并不是不能在一个类中创建另一个类 ...

谢谢啦!!
页: [1]
查看完整版本: 在A类成员中添加另一个B类的对象时,不可以在A类初始化的时候给B的一个成员赋值吗