社区
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()有何不同?
多谢
...全文
221
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
作业
写回复
配置赞助广告
用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()了。估计编译器自动舍掉不运行了
假如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]只定义了两个指针,只是两个指针变量。
C++ 用new和不用new创建类对象的
区别
My
Class
*a = new My
Class
:创建一个My
class
类型的指针a,并生成一个My
Class
对象,使指针a指向这个对象。 这个对象是匿名对象没有名字,用完后需要delete。对此指针解引用可以获得该对象(*a)。(a本身的内存空间在栈上,而它存放的是在堆上分配的内存的地址。) My
Class
a : 在栈上定义的局部变量,生存周期是它所处的语句块(也就是离他最近的一对{})
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++中创建对象的时候加括号和不加括号的
区别
c++创建对象的语法有—– 1 在栈上创建 My
Class
a; 2 在堆上创建加括号 My
Class
*a= new My
Class
(); 3 不加括号 My
Class
*a = new My
Class
; 4.—————My
Class
a();声明了一个返回值为My
Class
类型的无参函数。#include
class
My
Class
{ public:
C语言
70,020
社区成员
243,264
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章