社区
C语言
帖子详情
MyClass A与MyClass A()的区别
caitou123
2003-01-27 08:53:13
class MyClass {
public:
void f(){cout<<"f()";}
MyClass(){cout<<"OK";}
};
MyClass a;
a.f();
就能输出"OK,f()".
而 MyClass b();
没有"OK"输出,进入调试,看到MyClass b()没有调用MyClass的构造涵数。
对b.f(),出错,说左值要是类。
MyClass a和MyClass b()有何不同?
多谢
...全文
139
13
打赏
收藏
MyClass A与MyClass A()的区别
class MyClass { public: void f(){cout<<"f()";} MyClass(){cout<<"OK";} }; MyClass a; a.f(); 就能输出"OK,f()". 而 MyClass b(); 没有"OK"输出,进入调试,看到MyClass b()没有调用MyClass的构造涵数。 对b.f(),出错,说左值要是类。 MyClass a和MyClass b()有何不同? 多谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
quickball
2003-01-28
打赏
举报
回复
MyClass b();
说明你声明了一个函数,它的返回值是MyClass的一个实例。
DoubleJiang
2003-01-28
打赏
举报
回复
MyClass(int i){cout<<"OK"};
MyClass a(100);
就ok,说不定就是编译器的问题
tiger_qi
2003-01-28
打赏
举报
回复
同意MyClass b()是个函数声明
声明了一个参数为void返回值为MyClass的函数
孩皮妞野
2003-01-28
打赏
举报
回复
这里确实是误认为函数声明了,但是问题与此无关。
例如:
MyClass c, d();
不可能被误认为是函数声明,但是同样d不会被构造。
没有参数的不要用(),
可用可不用的是这样的情形。
MyClass * p = new MyClass();
晨曦2003
2003-01-28
打赏
举报
回复
构造函数只是在定义对象时用来初始化对象的。
而MyClass b();只是定义一个MyClass类型的函数,并没有定义对象,没有初始化工作要做,自然也不会调用构造函数啦。
Zark
2003-01-28
打赏
举报
回复
同意!
MyClass b();
是函数声明!
kmfs
2003-01-27
打赏
举报
回复
MyClass b();
如int b();类似是函数声明
prf8
2003-01-27
打赏
举报
回复
同意toybearcn(黄金左右脚) (
alan118
2003-01-27
打赏
举报
回复
我觉得
MyClass(){cout<<"OK";}是个默认构造函数而
MyClass a;将调用默认构造函数,所以返回ok了
而
MyClass b();
这样写,好象是没有为这样定义构造函数,所以没有创建对象。不过,如果创建对象的话,一般不这么写。楼上说的没错吧
caitou123
2003-01-27
打赏
举报
回复
MyClass b()
最匹配的就是MyClass(){cout<<"OK";}啊,
所以我以为MyClass b()应该调用无参的构造函数。
看来不是那么一回事
toybearcn
2003-01-27
打赏
举报
回复
MyClass b();
这句声明了一个返回类型为MyClass的无参函数。
所以出错
jp311
2003-01-27
打赏
举报
回复
我认为是编译器认为MyClass b();是个function的声明(我这么认为的,编译器怎么看我就不知道了:))
qhgary
2003-01-27
打赏
举报
回复
我倒是第一次看到这样的写法。一般都只会出现Myclass a;的形式。
我刚才试了一下,便已运行居然没有问题。但是我调试了一下,发现
并没有运行这段,(如果MyClass b() 这么些的话)
你说的没有调用构造函数,就是说明b这个对象没有建立出来。当然就不能
调用b.f()了。估计编译器自动舍掉不运行了
2010年 十月 C加加 试题
自考本科 一、单项选择题(本大题共20小题,每小题1分,共20分) 在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。 1.C++中注释“∥”的有效范围是( ) A.从“∥”开始到行尾 B.从“∥”开始到下一个“∥” C.“∥”及其后一个字符 D.从“∥”开始到程序尾 2.假定My
Class
为一个类,则该类的复制构造函数的声明语句为( ) A.My
Class
&(My
Class
x); B.My
Class
(My
Class
x); C.My
Class
(My
Class
&x); D.My
Class
(My
Class
*x); 3.下列选项不是C++关键字的是( ) A.typedef B.void C.bool D.inc 4.用于标识十进制常量的前缀或后缀是( ) 的 复习资料
My
Class
:学习平台的搭建
My
Class
My
Class
已停止维护
假如My
class
为一类,执行My
class
a[3],*p[2];语句时会自动调用该类构造函数几次
3次 My
class
a[3],*p[2]; a[3]中有3个My
class
对象,定义时会各调用My
class
构造函数一次。 My
class
*p[2]只定义了两个指针,只是两个指针变量。
My
Class
a,b[2],*p[2]调用了几次构造函数
在网上看到的这道题,答案是3次。因此
复制(拷贝)构造函数
复制(拷贝)构造函数接受其所属类的对象作为参数,原型如下 My
Class
::My
Class
(const My
Class
& a
Class
); 在下述情况下,将使用复制(拷贝)构造函数 1 将新的对象初始化为一个同类对象. My
Class
a
Class
;My
Class
b
Class
(a
Class
); 2 按值将对象传递给函数. void MyFunction(My
Class
a
Class
); 3 函数
C语言
69,378
社区成员
243,075
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章