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(); //没有新建对象,则不能调用函数

时间: 2024-11-05 16:23:53

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

JSP编程,url中加斜杠和不加斜杠的区别

JSP编程,url中加斜杠和不加斜杠的区别(sendredirect,requestdispatcher,servlet,filter) 转自:http://blog.csdn.net/tanyit/article/details/7319372 url中加斜杠”/”和不加斜杠的区别: 设webapp为web程序包名 通常来说,不加斜杠的形式(如”example.jsp”)请求的是相对于当前页面路径的资源 http://localhost:8080/webapp/examole: 加斜杠的形式(

Java类对象数组声明和初始化

Java是纯面向对象语言.类是其重要构成单位. 然后,在实际编程中,我们会自己定义一些类,如Point <span style="font-size:14px;">public class Point { public Point(){ Lat=0.0; Lng=0.0; } public double GetLat(){ return Lat; } public double GetLng(){ return Lng; } public void SetLat(doubl

Objective-C对象之类对象和元类对象

作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/8592492 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号wangzzstrive来支持我,谢谢! 作为C语言的超集,面向对象成为Objective-C与C语言的最大区别,因此,对象是Objective-C中最重要的部分之一.目前面向对象的语言有很多,Objective-C中的对象又和其他语言中的对象有什么区别呢?下面来简单介绍Objectiv

ResultSet转成java类对象

在做web开发时遇到一个事情: 需要从mysql数据表中查询数据并遍历查询结果 这样最简单的方式是:查询到结果根据表中字段列表的顺序来一个个获取字段,但这样需要记住字段的顺序,操作起来不是那么方便.因此便想可不可以把查询结果 ResultSet转化成java的实例对象,然后利用类对象的get方法,这样会方便清晰很多. 查了下,有很多可以参考,于是参考着有了自己的代码,如下: 1.mapper函数: package com.alibaba.search.offline.oddiff.service

字符串类的定义和字符串类对象的创建方式

String为字符串类. 其定义如下: public final class String 可以看出,String类是final类型的,是不可继承的.从源代码还可以看出,String从本质上说就是一个char类型的数组. 字符串类对象的声明有两种方式. 第一种,使用new关键字创建. String 变量名=new String("值"); 第二种,直接声明并初始化. String 变量名="值"; 我更喜欢第一种,标准的,所有类的对象的声明都通过  new 类的构造

NX二次开发-UFUN获取当前会话中加载的部件数量UF_PART_ask_num_parts

1 NX11+VS2013 2 3 #include <uf.h> 4 #include <uf_part.h> 5 #include <uf_ui.h> 6 7 8 //获取当前会话中加载的部件数量 9 int num = UF_PART_ask_num_parts(); 10 11 //打印 12 char msg[256]; 13 sprintf(msg, "当前会话中加载的部件数量为:%d", num); 14 uc1601(msg, 1);

访问修饰限定符的简单总结、final/abstruct/interface对类的限制、自动加载机制、序列化与反序列化【数据持久化和对象的序列化问题】、对象的拷贝(按引用是因为对象标识)和克隆(__clone方法中的this指向)

1.针对访问修饰限定符的理解只需要两点:(1)针对的是类的概念和访问代码的位置来确定是否能够访问(2)对访问修饰限定符的使用时只需要对该成员的使用场景注意即可[也就是内部,继承类,外部进行访问的权限] 不需要对内部进行太多理解[需要对php底层理解时进行理解] [重点][用途]通过访问修饰限定符将内部成员的权限合理的限制,然后再使用公共接口来调用这个基本服务,保证外部不能访问其内部的构件[这样既能够通过类内的设置,将内部的功能实现更好的限制,只有最外层的接口可以正常被访问到,而不了解内部的业务]

基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------&gt; 可以返回派生类对象的引用或指针

您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. 百度和网页 http://bbs.csdn.net/topics/380238133 的作者无关,不对其内容负责.百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面. 首页 精选版块 移动开发 iOS Android Qt WP 云计算 IaaS Pass/SaaS 分布式计算/Hadoop J

unreal3对象属性自动从配置文件中加载的机制

unrealscript中有两个与属性自动配置相关的关键字: config/globalconfig 当把它们应用于属性时,对象在创建后,该属性的初始值会被自动设置为相对应ini文件中的值. 举例来说,如有一个类: class HNet extends Object config(game) native(net); //var globalconfig string host;var config string host; function test() { `Log("HNet test,