C/C++教程

C++ 实例化对象有括号和无括号的区别

本文主要是介绍C++ 实例化对象有括号和无括号的区别,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

环境:VS2022

我们先定义一个 complex 类:

class complex
{
public:
	complex(double r= 0,double i = 0):re(r),im(i)
	{
		std::cout << "re=" << re << "im=" << im << std:: endl;
	}

private:
	double re, im;
};

这里我们定义了一个带有默认参数的构造函数。接下来我们在 main 函数中实例化 complex 对象,不使用括号,并输出其类型

int main()
{
	complex c1;
	
	std::cout << typeid(c1).name() << std::endl;
}

看一下输出:

re=0im=0
class complex

我们可以看到第一行是构造函数的输出,第二行输出 c1 的类型为 complex。

接下来,我们使用带括号的语法来定义一个 complex 类型

complex c2();

看一下输出:

class complex __cdecl(void)

我们发现构造函数并没有调用,而且输出的 c2 类型是一个函数,所以如果实例化一个没有参数的构造函数的类(或者所有的参数都有默认参数),不需要使用括号,使用括号以后,编译器会认为你定义了一个没有参数,返回值为 complex 的函数,

接下来我们在堆上实例化一个 complex 对象

complex *pc1 = new complex;
complex *pc2 = new complex();
std::cout << typeid(pc1).name() << std::endl;
std::cout << typeid(pc2).name() << std::endl;

看一下输出:

re=0im=0
re=0im=0
class complex * __ptr64
class complex * __ptr64

前两行为构造函数输出,后两行显示 pc1 pc2 为 complex 类型的指针。

所以使用 new 关键字来创建对象,使用带括号和不带括号是一样的。

这篇关于C++ 实例化对象有括号和无括号的区别的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!