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 打赏 收藏 转发到动态 举报
写回复
用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()了。估计编译器自动舍掉不运行了

69,378

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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