问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c++中在一个类中定义另一个只有带参数构造函数的类的对象,编译通...

发布网友 发布时间:2023-11-28 02:25

我来回答

4个回答

热心网友 时间:2024-03-26 13:19

在B中定义 A a; 是可以通过的,但在其他地方(比如函数中)这样是不对的。

在B中定义 A a; 只是告诉编译器:“B有一个A类的对象”,并不在定义的时候创建a这个对象成员,也就不考虑它的构造函数。a这个对象成员的创建是在执行B的构造函数时进行的,B的构造函数后面必须以初始化表的形式为a对象成员提供参数,比如
B( ) : a( 1 ) { }
如果在构造函数中不为a提供参数,会发生错误。

在其他地方(比如函数中)定义A的对象时,必须定义成 A a(参数);的形式。因为定义时就要创建A的对象,所以要考虑它的构造函数。

你的程序出现错误不是因为在B中定义 A a;引起的。是因为:
1、你定义了A a(5)。
这是不行的,因为此时并不创建A对象,不能为其提供参数。你说“编译器把此语句当成一个定义一个函数A a()”也是不对的。就是因为这时不能为a提供参数,一定要在B的构造函数中提供!

2、你的程序没有为B提供一个“可以为a提供参数”的构造函数。
这样你在主函数中定义B b的时候,就不能初始化它里面的a。

所以,你的代码应将这两个错误改过来,即写成如下:

class A
{
public:
A( int i ){}
};

class B
{
public:
B():a(1){} //或:B( int i ):a( i ){ }。对a提供参数一定要按
//这种形式,在冒号后,不能在花括号里面!
private:
A a;
};

void main()
{
B b;
}

热心网友 时间:2024-03-26 13:15

A a(5); //但是这里也编译通不过,编译器居然把此语句当成一个定义一个函数A a()了

这里通不过很正常,有歧义的感觉:
1.定义一个A的对象,调用构造函数初始化,但初始化并不是放这里,所以编译器不会这样解释。
2.定义函数。

定义A的指针吧

热心网友 时间:2024-03-26 13:20

这是典型的对象成员的例子,该成员应使用初始化列表初始化。如下
再创建构造函数时使用初始化列表
比如
class B
{A a;
B():a(5){}
}

类中的对象成员:即把对象作为另一个类的成员。比如class hyong1{public: hyong x;},这时如果声明了一个hyong1的对象则调用hyong的默认构造函数初始化对象x,而不管hyong1的构造函数有没有初始化对象x,如果没有声明hyong1的对象,则不会初始化对象x。
2.如果要在用带有参数的构造函数初始化类中的对象成员,则对象成员必须在初始化列表中初始化。否则将发生错误。
3.如果在初始化列表中显式对hyong1的对象成员x初始化了,则用初始化列表的构造函数初始化对象x。不会再调用对象成员x的默认构造函数初始化对象x了。
4.如果再在hyong1的构造函数里对x重新赋值,即有语句x=hyong(),此语句不是对对象变量x初始化,而是对对象x重新赋值,将调用赋值操作符函数。

更多关于类中的各种成员(比如嵌套类等)的应用请下载本人的文章《C++类中的各种成员,嵌套类,友元,this指针及与类有关的各种运算符》

热心网友 时间:2024-03-26 13:16

#include<iostream>
using namespace std;

class A
{
public:
A(int i){}
};

class B
{
public:
B():a(5)//构造函数初始化子对象
{
}
private:
//A a; //这里当然通不过,没有可用的构造函数
A a; //但是这里也编译通不过,编译器居然把此语句当成一个定义一个函数A a()了,郁闷!
};

void main()
{
B b;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
宁德市有哪些区 福建宁德市有哪些区 宁德市有哪些商圈 安装项目错误: 项目文件不存在 (C:\Windows\SolidWorks\IM_20110-4 高压103低压98心跳104,医生初诊是脑梗,怎么治疗,吃什么药?饮食方面注 ... 最新版好玩的谐音梗网名210个 比较搞笑幽默的网名 德国猎梗FCI标准 “流泉百折玉琮琤”的出处是哪里 “细听犀谈座为倾”的出处是哪里 “西蜀东吴一世英”的出处是哪里 请问下我的电脑登陆QQ时老是要填验证码,登所有的账号都要验证码,很烦... 黄山云海有什么特点???762 Y470昨天突然自动关机,然后开不了机电源灯不亮,是什么情况... 黑鸦片黑色奥飘茗女士香水真的很难闻吗 碳酸氢钠与氢氧化钡的反应方程式和离子方程式37 煮饭大概要煮多少分钟?7 我的电脑过卡,CPU占用率过高。且。。重装个什么系统较好? 慧科讯业的大数据分析后台和舆情监测软件怎么样? 连接线都插好了、网线也连了,就是显示无信号,请问下个步骤是什...2 吉林市屹腾教育教不好,对孩子不负责任,孩子去的时候能打300分左右,在... AV信号线连接方法 佳木斯火车站到机场步行多长时间? 在一个类里声明别的类的对象有什么作用 用同一个手机号注册的两个如何切换帐号 淘宝上看到一个5块钱的羽绒服,月销两千多件,评论只有三四个。。。能买... 电脑玩游戏cpu有时占用率20导致卡,过会又占用70就不卡了... 像素生存者2无法连接服务器怎么回事,是不是封了,如果是怎么解...32 屹腾教育报考怎么样 ...过程中,温度将___;无论晶体或非晶体,在凝固过程中都要___热量._百... 冷冻的速度快还是解冻快?? 在一个类中新增另一个类的对象,两个类之间有何联系,运行时怎样互相_百 ... 物体吸热和放热的条件是什么? 汽车中的光学知识: 轿车上装有茶色玻璃后,行人很难看清车中人的面孔... 侠盗飞车罪恶都市的所有可买的房屋都在哪里呢?1368 职务能写七级职员八级职员吗 慧科讯业、恩讯和鹰犬的舆情监控哪家更好一些? 楚乔传结局是什么5720 离职时扣除员工服装折旧费是否合理?56 像素生存者2,如何自助解封13 怎么自制超微型H型风力发电机18 note3神庙逃亡和淘宝关掉以后显示还在耗电,怎么有两个安卓系统在运行... 微信被骗了对方注销了怎么办?我找代拍被骗了170,然后他把账号... 托尼巴赞写书的顺序7 怎样通过添加好友3 ...热温度保持___,凝固时___热温度保持___,非晶体熔化时___热温... 有方法可以通过直接加好友吗 公司最近在做金融行业的舆情监控,有没有推荐的平台想用慧科讯业... dnf服务器不可用怎么解决164 ...帮忙给个商业区的物业管理方案的范本给我看看 苹果手机充电器a1443与iPad mini a1385可以...4