一道填空题

飘荡的心 2009-02-27 09:23:01

class A
{
int x;
public:
A(int a)
{
x=a;
}
};
class B
{
A y;
public:
B(int a);
};




问题是定义B类的构造函数,把值赋给对象y的x

B(int a):y(a){}这种方法可行
但是貌似题目已经给了构造函数的声明
要在类外对构造函数定义,但是该怎么赋值呢,该如何写
...全文
528 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
k_summer7 2009-03-01
  • 打赏
  • 举报
回复
楼主还是有些概念不清楚,我问个问题:什么是直接初始化列表和赋值初始化,有什么区别?
记住,有三种情况下,不能在函数体内赋值,必须使用初始化列表:
1)类中存在一个没有默认构造函数的类对象成员变量;
2)const类型;
3)引用类型;
楼主的题目属于第一种情况(因为类A没有默认构造函数),所以除非给A提供一个默认构造函数,否则使用初始化列表是唯一的方法,也就是说,楼主提供的方法是唯一的正解。
wwwypy 2009-03-01
  • 打赏
  • 举报
回复
用初始化列表比较好。
lizzoe 2009-03-01
  • 打赏
  • 举报
回复
up
lzh9955 2009-03-01
  • 打赏
  • 举报
回复
UP
  • 打赏
  • 举报
回复
又想了一下,直接用构造函数初始化列表就可以了。
B::B(int a):y(a){}
加在外面就可以。
ypb362148418 2009-02-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chen_yuan 的回复:]
C/C++ code
还是这样呀
B::B(int a):y(a){}
[/Quote]


支持这种写法
nulixuexiing 2009-02-28
  • 打赏
  • 举报
回复
B::B(int a):y(a){}
qinqinhao 2009-02-28
  • 打赏
  • 举报
回复
ding
rgmlkthh 2009-02-27
  • 打赏
  • 举报
回复
学习一下。
lbt777777 2009-02-27
  • 打赏
  • 举报
回复
up
Sco_field 2009-02-27
  • 打赏
  • 举报
回复
这位老兄想必还没有弄清赋值和初始化的区别

[Quote=引用 14 楼 sxbwelcome 的回复:]
B(int a):y(a){}这种形式是通过成员初始化列表完成初始化工作,这样只能完成简单的赋值
一般的构造函数可以这样定义
B::B(int a)
{y=a;}
这种形式可以完成更复杂的初始化工作,如分配空间等
[/Quote]
qingkongyihe2008 2009-02-27
  • 打赏
  • 举报
回复
2楼正解
Sco_field 2009-02-27
  • 打赏
  • 举报
回复
你这样有问题,因为A没有无参构造函数, A y; 肯定编译不过的


[Quote=引用 9 楼 tangshuiling 的回复:]
C/C++ code
如果不怕破坏类的封装性,暴力方式也未尝不可
B::B(int a)
{
*(int*)(&y)=a;
}
[/Quote]
Sco_field 2009-02-27
  • 打赏
  • 举报
回复
B(int a):y(a){};
加个初始化列表就可以了,而且只能是初始化列表,不然是没办法了

[Quote=引用 8 楼 hqin6 的回复:]
C/C++ codeclass A
{
int x;
public:
A(int a)
{
x=a;
}
};
class B
{
A y;
public:
B(int a);
};



这肯定编译不过去,必须的给A提供一个无参构造函数



class A
{
int x;
public:、
A(){}
A(int a)
{
x=a;
}
};
class B
{
A y;
public:
B(int a);
};

B::B(int a)
{
A mid(a);
y = mid;
}

这应该能达到目的
[/Quote]
dongpy 2009-02-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chen_yuan 的回复:]
C/C++ code
还是这样呀
B::B(int a):y(a){}
[/Quote]
UP
lzonline01 2009-02-27
  • 打赏
  • 举报
回复
C++编程思想上有讲的,可以看看
yangch_nhcmo 2009-02-27
  • 打赏
  • 举报
回复

class A
{
int x;
public:
A(int a)
{
x=a;
}
};
class B
{
A y;
public:
B(int a);
};

B::B(int a):y(a){}

pengzhixi 2009-02-27
  • 打赏
  • 举报
回复
B::B(int a):y(a){}个人认为这是最好的办法了.因为类A没有默认构造函数,其他的方法都很有可能会使用到A的默认构造函数.所以还是用初始化列表最稳当了.
chenyingshu 2009-02-27
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 waizqfor 的回复:]
引用楼主 CjiajiaILOVEU 的帖子:
C/C++ code
class A
{
int x;
public:
A(int a)
{
x=a;
}
};
class B
{
A y;
public:
B(int a);
};


问题是定义B类的构造函数,把值赋给对象y的x

B(int a):y(a){}这种方法可行
但是貌似题目已经给了构造函数的声明
要在类外对构造函数定义,但是该怎么赋值呢,该如何写

在类外的 直接写就可以了 也是可以的 给你构造函数没什么关系吧

C/C+…
[/Quote]
这个我觉得是最好的方法
jakqigle 2009-02-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 chin_chen 的回复:]
不太可以吧,
因为在进入B的构造函数之前,B中的y必须得到构造,不然就出错啊。
[/Quote]
的确,除非像8楼说的在class A中给出一个无参的构造函数才可以的吧。
加载更多回复(14)

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧