鱼C论坛

 找回密码
 立即注册
查看: 1229|回复: 6

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

[复制链接]
发表于 2020-11-7 17:12:34 | 显示全部楼层 |阅读模式

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

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

x
#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;
}
最佳答案
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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-11-7 17:14:06 | 显示全部楼层
17        2        D:\学习\C++\未命名2.cpp        [Error] no matching function for call to 'Phone::Phone()'   报错原因如上
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-11-9 14:06:32 | 显示全部楼层
sunrise085 发表于 2020-11-7 17:30
两个问题,给你写了注释

我懂了,写了有参构造以后不提供默认构造 ,编译器在一个类里创建另一个类对象的时候会报错,对吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

差不多是这个意思。前半句是对的,后半句不对。
没有了默认构造函数,并不是不能在一个类中创建另一个类的对象,而是不能像你写的那样创建另一个类的对象了。创建类对象就必须有对应的参数,可以像三楼那样写。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢啦!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 17:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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