博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ Primer Plus 第六版笔记
阅读量:6315 次
发布时间:2019-06-22

本文共 702 字,大约阅读时间需要 2 分钟。

C++ Primer Plus 第六版笔记

关于对象声明的思考

转自:http://www.cnblogs.com/weiqubo/archive/2009/11/02/1930042.html

 

  1. #include <iostream>  
  2. class MyClass  
  3. {  
  4. public:  
  5.     MyClass()   
  6.     {   
  7.         std::cout << "Hello MyClass!" << std::endl;   
  8.     }  
  9. public:  
  10.     void MyMethod()   
  11.     {   
  12.         std::cout << "Hello MyMethod!" << std::endl;   
  13.     }  
  14. };  
  

 

如果这样定义对象:MyClass obj; 那么它的构造函数将会被执行,如果调用obj.MyMethod();也会执行正确。

可是如果带有括号:MyClass obj(); 那么它的构造函数不会被执行,调用obj.MyMethod();也会出现语法错误,请问这种语法是把obj定义成什么了?

MyClass obj()把obj定义成什么 从语法上看是定义了一个名为obj,类型为MyClass类(也就是返回值为MyClass类型)的无参数函数。

另外如果进行动态的堆分配的话是要带括号的,比如 MyClass *obj = new MyClass() 不加会报错(但是,在vc6.0中不加()并没有报错,而且结果是一样的,原因待解?但是有一条,如果类中定义了带参数的构造函数,定义类时不用括号肯定是错误的#add  为避免错误,统一加括号为妙)

转载于:https://www.cnblogs.com/flylong0204/p/4731005.html

你可能感兴趣的文章
OpenTest:CodedUI如何支持下拉树形列表选择?
查看>>
STM32 NVIC学习
查看>>
无数据库日志文件恢复数据库方法两则
查看>>
VS中"生成注释WEB页"的问题
查看>>
数据库中非空字段。在MAP时应该注意的问题。
查看>>
jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera...
查看>>
推荐十几款Firefox web开发插件
查看>>
关于C#中AutoResetEvent和ManualResetEvent的一点学习心得
查看>>
C# 委托的同步调用和异步调用
查看>>
How do I get data from a data table in javascript?
查看>>
禁止CloudStack删除Xenserver原有虚拟机
查看>>
hdu 3177
查看>>
HTML入门教程
查看>>
[LintCode] Find the Connected Component in the Undirected Graph
查看>>
sudo apt-get 和dpkg命令大全
查看>>
那是什么进程 —— jusched.exe是什么? 它为何运行?
查看>>
ASP.NET 应用程序生命周期
查看>>
SqlStoredProc池
查看>>
[转]以安装桌面体验功能为例来探索windows2012服务器管理器的新变化
查看>>
fastscript调用delphi方法和DELPHI调用FASTSCRIPT方法
查看>>