在开发中,经常这样创建对象:类名 对象名(参数);
但是如果不进行参数传递,想要初始化时,使用这种方式:类名 对象名();,是否正确
#include<iostream>
using namespace std;
class C{
public:
C(){
cout<<"Hello C++\n";
};
C(int m){
cout<<"I love C++\n";
};
private:
int n;
};
int main(){
C c;//对
C c();//错,没有运行构造函数!声明一个无参函数c,返回值类型为A;
return 0;
}
A a(); 声明一个无参函数a,返回值类型为A;
所以,现在问题就很清楚了,当我们以以下形式创建类对象时:
i)类名 对象名
默认调用“对象名()”这个构造函数,在栈内存中存在对象名,在堆内存中存在实际对象;在栈内存中实例化对象;
ii)类名 对象名(一个或以上个参数)
默认调用相应的构造函数,在栈内存中存在对象名,在堆内存中也是存在实际对象的;在栈内存中实例化对象;
iii)类名 对象名()
不调用任何构造函数创建对象,仅在栈内在中存在对象名,在堆内存中并不存在实际的对象;仅声明对象,不在栈内存中实例化