C++类的对象问题,到底是创建对象还是局部变量

我定义了一个Cat类,然后不清楚Cat Frisky与Cat Frisky()的区别,本来以为前者是定义常规局部变量,将调用析构函数,后者是定义的类的对象。刚刚遇到一个前者是创建了一个类对象,实在搞糊涂了。。求大神助攻小白,大恩不言谢!!

8个回答

Cat Frisky; 调用默认构造函数
Cat Frisky(); 调用无参数的构造函数(即默认构造函数)
Cat Frisky(x, y); 调用需要两个参数的构造函数(假设存在该构造函数)
三者都会创建对象

wanzi0933
wanzi0933 因为感觉你说的没有啥区别。。。。
大约 4 年之前 回复
wanzi0933
wanzi0933 那我怎么区分呢??主要是前两者。。
大约 4 年之前 回复

准确来说构造对象是需要加()显示的告诉编译器你调用了构造函数,不写()的话,编译器会自己处理找你调用的构造函数

wanzi0933
wanzi0933 构造函数应该在类中声明或者直接定义嘛,我是说本来类+对象名称就是定义一个对象的格式,现在我遇到一个程序是类+对象名称+()格式,所以不懂两者区别。。
大约 4 年之前 回复

前者是定一个类的实例,缺省构造函数,后者可以传递构造函数参数等

wanzi0933
wanzi0933 有了前者应该调用构造函数的意思吗?后者是不用的。是这个意思吗?
大约 4 年之前 回复

首先你这个问题就不太对,什么叫“对象”?什么叫“局部变量”?
Cat Frisky与Cat Frisky()都会调用构造函数创建一个Cat类的对象,即实例,至于哪个构造函数就是@xpbobcsdn所说的了。

u011191259
JuggLee 回复wanzi0933: 我看丢了,你这里Cat类的“()”应该是被重载了吧,如果没被重载,这个Cat Frisky();没有任何作用,不会调用构造函数
大约 4 年之前 回复
wanzi0933
wanzi0933 你这样说,貌似我更糊涂了。。。。。
大约 4 年之前 回复

a7777777888的回答靠谱的

我用vs调试了一下,发现Cat Frisky()这种写法属于无效代码一样。

wanzi0933
wanzi0933 我看了你的代码,但是这种写法确实是定义类的对象。。
大约 4 年之前 回复
u011191259
JuggLee http://blog.csdn.net/u011191259/article/details/49612773
大约 4 年之前 回复

一个是类的名称,一个是构造函数

纠正一下,Cat Frisky();这种写法是有问题的,而且编译报错,因为编译器会把他当做函数来处理,所以说如果想显示的调用默认构造就必须用Cat Frisky;

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!