鱼C论坛

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

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

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

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

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

x
  1. #include <iostream>
  2. using namespace std;

  3. class Phone{
  4. public:
  5.         Phone(string Name){
  6.                 cout<<"Phone的构造函数调用" <<endl;
  7.                 m_Pname = Name;
  8.         }
  9.         string m_Pname;
  10. };

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


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

  27. int main(){
  28.         test01();
  29.         system("pause");
  30.         return 0;
  31. }
复制代码
最佳答案
2020-11-7 17:30:11
两个问题,给你写了注释
  1. #include <iostream>
  2. using namespace std;

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

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

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

  28. int main(){
  29.     test01();
  30.     system("pause");
  31.     return 0;
  32. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-11-7 17:14:06 | 显示全部楼层
17        2        D:\学习\C++\未命名2.cpp        [Error] no matching function for call to 'Phone::Phone()'   报错原因如上
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-7 17:30:11 | 显示全部楼层    本楼为最佳答案   
两个问题,给你写了注释
  1. #include <iostream>
  2. using namespace std;

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

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

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

  28. int main(){
  29.     test01();
  30.     system("pause");
  31.     return 0;
  32. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-11-7 17:58:12 | 显示全部楼层
  1. #include <iostream>
  2. using namespace std;

  3. class Phone {
  4. public:
  5.     Phone(string Name) {
  6.         cout << "Phone的构造函数调用" << endl;
  7.         m_Pname = Name;
  8.     }
  9.     string m_Pname;
  10. };

  11. class Person
  12. {
  13. public:
  14.     string m_Name;
  15.     Phone m_Phone;

  16.     Person(string pname, string Pname) :m_Phone(Phone(Pname)) {
  17.         m_Name = pname;
  18.     }
  19. };


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

  25. int main() {
  26.     test01();
  27.     system("pause");
  28.     return 0;
  29. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

我懂了,写了有参构造以后不提供默认构造 ,编译器在一个类里创建另一个类对象的时候会报错,对吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

谢谢啦!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-9 19:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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