为什么提示类不存在默认构造函数????

classA{floatx,y;public:A(inta,intb){x=a;y=b;}voidShow(){cout<<"x="<<x<<'\t'<<"y="<<y<... class A
{
float x, y;
public:
A(int a, int b) { x = a; y = b; }
void Show(){ cout << "x=" << x << '\t' << "y=" << y << '\n'; }
};
class C
{
float z;
A a1;//类C的数据成员为类A 的对象a1
public:
C(int a, int b, int c)
{
z = a;
A a1(b, c);

}//类C的对象初始化
void Show(){
cout << "z = " << z << '\n'; a1.Show();
}
};
void main(void)
{
C c1(1.0, 2, 3); //对类C的对象初始化
c1.Show();
system("pause");
}
展开
 我来答
kaixingui2012
2014-11-07 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6179万
展开全部
class  A 
{
float   x, y;
public:
A(int a, int b) { x = a; y = b; } 在类A中只定义了这一个带参的构造函数
A() {} //加一个不带参的构造函数
void Show(){ cout << "x=" << x << '\t' << "y=" << y << '\n'; }
};
class C
{
float   z;
A  a1;//这里定义一个A类的对象a1, 没有带参数,所以会报错,在A中加一个不带参的构造函数就好了。
追问
可是如果写成     C(int a,int b,int c):a1(b, c)   {z=a;}//类C的对象初始化
就是对的 为什么?
追答
C(int a,int b,int c):a1(b, c)   {z=a;} 这种写法应该是   相当于调用了A(int a, int b)这个函数去定义类对象了!

class C
{
float z;
A a1;//类C的数据成员为类A 的对象a1 这里应该不是一个真正的对象a1,只有在类C对象定义时才会真正定义a1,其构造格式(对应的函数)是看类C构造函数是如何实现的。
笃侠6A
2014-11-07 · TA获得超过3734个赞
知道大有可为答主
回答量:3205
采纳率:75%
帮助的人:3216万
展开全部
A a1;//类C的数据成员为类A 的对象a1

A类没有默认构造函数,所以无法创建该对象。
更多追问追答
追问
能不能再清楚点
追答
由于A类提供了有参构造函数,所以系统就不提供默认构造函数(即无参构造函数)了,因此在创建C类对象时,无法创建其A类对象成员a1。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
空号一号
2014-11-07 · TA获得超过3845个赞
知道大有可为答主
回答量:1495
采纳率:0%
帮助的人:1585万
展开全部
你的类C只有一个构造函数:C(int, int, int),然而你在main第1行调用了C(float, int, int)。参数的类型不匹配。
追问
1.0改成1也是一样
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式