码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-07-30 13:51:40      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:div   blog   类的方法   缺省   for   cpp   highlight   实例   struct   

以下代码有什么问题?

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 类对象的声明中加小括号{}和不加小括号{}的区别

标签:div   blog   类的方法   缺省   for   cpp   highlight   实例   struct   

原文地址:http://www.cnblogs.com/dd2hm/p/7258839.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!