1、一般全局变量放到cpp 文件里面,而不是.h 里面。要不然容易乱套,这个乱几次就好了,先记住这样一种编码规范。

以为大家都引入就比较麻烦,但是实现起来就只有cpp里面才有。毕竟.h是要被包含的文件,使用的时候就有可能会出现问题。

在访问的时候使用extern关键字。

说到extern 就稍微扩展一下吧。还有就是在C,C++混合编程的时候,把c的代码扩在extern的里面,举例:

Extern{

/*c语言

的代码

*/

【记不记得之前说过C语言不支持重载,但是c++是支持重载的。那个地方就可以看到一些端倪,为了实现重载,为了让C++的编译器支持C语言,C++还是做了很多的努力的。比如在编译的时候,为C++函数增加了头和尾巴。随便举个例子吧比如原函数是: void myfunction(void){}.这个C++函数在编译以后会变成 sdmyfunctionv 大概长成这个样子。所以,在编译的时候,总是会出现一些不太一样的地方,这就需要,我们把当前文件或者一部分文件按照C的方式编译。】

所以extern有两个应用场景。1、引入外部变量,2、让代码段以C的方式编译。

2、初始化方式:

  1. #include <iostream>
  2. using namespace std;
  3. class MyClass{
  4. public:
  5. MyClass(){
  6. cout<<"no parameter"<<endl;
  7. }
  8. MyClass(int a){
  9. cout<<"int:"<<a<<endl;
  10. }
  11. };
  12. int main()
  13. {
  14. MyClass *myClass = new MyClass();//无参构造
  15. MyClass *myClass1 = new MyClass();//有参构造
  16. MyClass myClasses[] = {MyClass(),MyClass(),MyClass()};//对象数组的实例化。
  17. cout << "Hello World!" << endl;
  18. return ;
  19. }

单例设计模式:

主要是静态变量的初始化:

mysingle.h

  1. #ifndef MYSINGLE_H
  2. #define MYSINGLE_H
  3. class MySingle
  4. {
  5. private:
  6. MySingle();
  7. static MySingle *mySinglePtr;
  8. public:
  9. static MySingle *getMySingle(void);
  10. static void freeMySingle(void);
  11. void freeCurrentSingle(void);
  12. };
  13. #endif // MYSINGLE_H

main.cpp

  1. #include <iostream>
  2. #include <mysingle.h>
  3. using namespace std;
  4. int main()
  5. {
  6. MySingle *mySingle = MySingle::getMySingle();
  7. MySingle *mySingle1 = MySingle::getMySingle();
  8. cout<<"mySingle address: "<<mySingle<<endl;
  9. cout<<"mySingle1 address: "<<mySingle1<<endl;
  10. MySingle::freeMySingle();
  11. mySingle->freeCurrentSingle();
  12. mySingle1->freeCurrentSingle();
  13. cout << "Hello World!" << endl;
  14. return ;
  15. }

mysingle.cpp

  1. #include "mysingle.h"
  2. #include <iostream>
  3. MySingle *MySingle::mySinglePtr=NULL;
  4. //蒙蔽了,这个得这么看: MySingle * 是类型,MySingle::mySinglePtr=NULL;
  5. //是MySingle 里面的mySinglePtr 这个属性的值 然后置空了。
  6. MySingle::MySingle()
  7. {
  8. }
  9. MySingle *MySingle::getMySingle()
  10. {
  11. if(mySinglePtr==NULL){
  12. mySinglePtr = new MySingle();
  13. }
  14. return mySinglePtr;
  15. }
  16. /**
  17. * @brief MySingle::freeMySingle
  18. * 由类释放
  19. */
  20. void MySingle::freeMySingle()
  21. {
  22. if(mySinglePtr!=NULL){//如果不为空的话,
  23. delete mySinglePtr;//释放对应的内存
  24. mySinglePtr = NULL;//然后指向空
  25. }
  26. }
  27. /**
  28. * @brief MySingle::freeCurrentSingle
  29. * 由对象释放。
  30. */
  31. void MySingle::freeCurrentSingle()
  32. {
  33. if(mySinglePtr!=NULL){
  34. delete mySinglePtr;
  35. mySinglePtr = NULL;
  36. }
  37. }

部分快捷键:

http://www.tuicool.com/articles/IjuaQz

c++与c不太相同的一些地方2的更多相关文章

  1. c++与c不太相同的一些地方1

    1.c++区别与java的一个地方:C++更多的是一种规范,不同时期的不同标准,提供了不同的语法要求.所以各个厂商在对C++的支持上也做得不尽相同,比如有些语法vs就支持gcc 就支持的差一些,而某些 ...

  2. 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用

    由于ASP.NET Web API具有与ASP.NET MVC类似的编程方式,再加上目前市面上专门介绍ASP.NET Web API 的书籍少之又少(我们看到的相关内容往往是某本介绍ASP.NET M ...

  3. (转)深入理解Java的接口和抽象类

    原文地址: http://www.cnblogs.com/dolphin0520/p/3811437.html 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP ...

  4. 深入理解Java的接口和抽象类(转)

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

  5. 关于SharePoint 2013的工作流(二)

    摸索完了如何画流程实现功能接下来,就是如何配置和部署了.在添加工作流之前,肯定需要一个审批人的配置以及阀值等等的配置. 这个的实现基本上和以前的工作流一致.写法却不一样了,模板自带的都是用js实现的. ...

  6. 【转载】Java垃圾回收机制

    原文地址:http://www.importnew.com/19085.html Java垃圾回收机制 说到垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和Java联 ...

  7. 深入理解Java的接口和抽象类

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

  8. Android编程容易犯的错误之二

    11.不要太相信工具,比如Eclipse里面的断点遇到多线程什么,经常不起作用/走不到,还有就是如果语句为空的也不会走,这时候别太早下结论断点地方出错了, 所以每个工程都应该有日志的开关,通过查看日志 ...

  9. EnglishLeaning

    今天看了些hadoop官方reference感觉自己词汇量和语法真是又回到解放前了.于是,痛下决心要好好学习英语.找到了一些学习的方法,自己记录下来,也和大家一起借鉴 努力目标: 掌握大量的计算机英语 ...

随机推荐

  1. POJ 2001-Shortest Prefixes(Trie 入门)

    题意:给你一组串,求每个串在组中唯一标志的最短前缀 分析:保存树上经过各节点的单词个数,扫描每个串当经过节点单词个数是一(能唯一标志)结束 #include <map> #include ...

  2. eventlet的学习

    转自:http://bingotree.cn/?p=281 官方网站:http://eventlet.net/ 之前小秦我写了篇python中协程和yield的文章,这里小秦我再总结一下eventle ...

  3. Kooboo中如何切换数据库(注意:如果切换数据库,需要Kooboo中没有一个website 否则会报错数据库中没有表之类的)

    Setup database provider 来自Kooboo document   Kooboo CMS can almost support all the types of database, ...

  4. connect to a specific wifi network in Android programmatically

    http://stackoverflow.com/questions/8818290/how-to-connect-to-a-specific-wifi-network-in-android-prog ...

  5. TextView & EditText

    TextView 1.下划线 textView.getPaint().setFlags(Paint. UNDERLINE_TEXT_FLAG ); //下划线 2.单独做第一步,文字会出现锯齿,要加下 ...

  6. MSSQLSERVER数据库- 作业调度定时备份数据库

    作业调度和备份数据库是常见的行为,掌握这两项技术我觉的非常有必要. 在网上找到这个示例,记录在这里 备份数据库的SQL语句 --自动备份并保存最近5天的SQL数据库作业脚本 ) DECLARE @da ...

  7. Java输出考试前三名

    实现输出考试成绩的前三名 要求: 1. 考试成绩已保存在数组 scores 中,数组元素依次为 89 , -23 , 64 , 91 , 119 , 52 , 73 2. 要求通过自定义方法来实现成绩 ...

  8. 为什么只有在用Visual Studio启动程序时会抛出InvalidOperationException异常

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:为什么只有在用Visual Studio启动程序时会抛出InvalidOperationExceptio ...

  9. spring读书笔记----Quartz Trigger JobStore出错解决

    将Quartz的JOBDetail,Trigger保持到数据库的时候发现,系统报错 The job (DEFAULT.jobDetail) referenced by the trigger does ...

  10. 本地或者是koala软件编译less文件为css

    背景: 事情的起因是这般的,平时工作是在线上办公,样式是使用less来写,于是乎,这样我从线上download下来的less文件无法直接在自己的本地环境运行.有一个问题就是我要把less文件先编译成c ...