13 类对象的声明中加小括号{}和不加小括号{}的区别

Posted 王小东大将军

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了13 类对象的声明中加小括号{}和不加小括号{}的区别相关的知识,希望对你有一定的参考价值。

以下代码有什么问题?

struct   Test   
  {   
          Test(   int   )   {}   
          Test()   {}   
          void   fun()   {}   
  };   
  void   main(   void   )   
  {   
          Test   a(1);   
          a.fun();   
          Test   b();   
          b.fun();   
  }  

A b.fun()会出错  

B Test结构的定义中应该加上public修饰符,才能main函数值调用该类的方法

C Test(int) {}改成Test(int a) {}

D 以上说法都错误

解答:

 b.fun();   //b不是Test的实例对象

类是结构体的扩展,在类中封装了对数据成员的操作,缺省的成员为私有的,而结构体为公有的,这就是它们的区别,对构造函数的调用,如果没有参数,是不需要加上括号的,如果加了括号,就不是定义一个对象了,而是声明了一个函数,返回该类型,所以上面的Test   b(),实际上是调用一个函数名为b,返回类型为Test的函数,而不是创建了一个对象b,去掉括号后,就是调用的没有形参的构造函数。

 

本质:类对象的声明中加小括号{}和不加小括号{}的区别:不加小括号{}表示实例化了一个类对象,调用默认构造函数;加小括号{}则表示声明了一个函数,参数为空,返回类型为类类型。

所以,Test b();运行后不会出现问题,而后面的b.fun()由于b不是类对象,不能调用类成员函数而导致编译错误!

 

Test b(); 

request for member ‘fun‘ in ‘b‘, which is of non-class type ‘Test()‘默认构造函数直接写 Test b;就可以。

 

Test a(1); //新建了一个对象

a.fun(); //因此可以调用函数

Test b(); //声明了一个函数,并没有新建对象

b.fun(); //没有新建对象,则不能调用函数

 

以上是关于13 类对象的声明中加小括号{}和不加小括号{}的区别的主要内容,如果未能解决你的问题,请参考以下文章

调用类时,加括号和不加括号的区别

Mysql的Where条件,加括号和不加括号的区别。求指导。。。。。

typeof加括号和不加括号的区别

闭包函数之函数加括号和不加括号的意义

Python调用函数加括号和不加括号的区别

Python调用函数加括号和不加括号的区别