c++与c不太相同的一些地方2
2024-08-22 19:10:13
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、初始化方式:
#include <iostream>
using namespace std;
class MyClass{
public:
MyClass(){
cout<<"no parameter"<<endl;
}
MyClass(int a){
cout<<"int:"<<a<<endl;
}
};
int main()
{
MyClass *myClass = new MyClass();//无参构造
MyClass *myClass1 = new MyClass();//有参构造
MyClass myClasses[] = {MyClass(),MyClass(),MyClass()};//对象数组的实例化。
cout << "Hello World!" << endl;
return ;
}
单例设计模式:
主要是静态变量的初始化:
mysingle.h
#ifndef MYSINGLE_H
#define MYSINGLE_H
class MySingle
{
private:
MySingle();
static MySingle *mySinglePtr;
public:
static MySingle *getMySingle(void);
static void freeMySingle(void);
void freeCurrentSingle(void);
};
#endif // MYSINGLE_H
main.cpp
#include <iostream>
#include <mysingle.h>
using namespace std;
int main()
{
MySingle *mySingle = MySingle::getMySingle();
MySingle *mySingle1 = MySingle::getMySingle();
cout<<"mySingle address: "<<mySingle<<endl;
cout<<"mySingle1 address: "<<mySingle1<<endl;
MySingle::freeMySingle();
mySingle->freeCurrentSingle();
mySingle1->freeCurrentSingle();
cout << "Hello World!" << endl;
return ;
}
mysingle.cpp
#include "mysingle.h"
#include <iostream>
MySingle *MySingle::mySinglePtr=NULL;
//蒙蔽了,这个得这么看: MySingle * 是类型,MySingle::mySinglePtr=NULL;
//是MySingle 里面的mySinglePtr 这个属性的值 然后置空了。
MySingle::MySingle()
{
}
MySingle *MySingle::getMySingle()
{
if(mySinglePtr==NULL){
mySinglePtr = new MySingle();
}
return mySinglePtr;
}
/**
* @brief MySingle::freeMySingle
* 由类释放
*/
void MySingle::freeMySingle()
{
if(mySinglePtr!=NULL){//如果不为空的话,
delete mySinglePtr;//释放对应的内存
mySinglePtr = NULL;//然后指向空
}
}
/**
* @brief MySingle::freeCurrentSingle
* 由对象释放。
*/
void MySingle::freeCurrentSingle()
{
if(mySinglePtr!=NULL){
delete mySinglePtr;
mySinglePtr = NULL;
}
}
部分快捷键:
http://www.tuicool.com/articles/IjuaQz
最新文章
- ASP.NET MVC 利用IRouteHandler, IHttpHandler实现图片防盗链
- HTML5 —— 自学第一课
- Linux 下安装中文 ctex 指南
- LeetCode - Populating Next Right Pointers in Each Node
- js 中 toString( ) 和valueOf( )
- Python与Hack之window下运行带参数的Python脚本,实现一个简单的端口扫描器
- [LintCode] Candy 分糖果问题
- atitit.泛型编程总结最佳实践 vO99 java c++ c#.net php
- C#路径总结
- linux环境(CentOS-6.7)下redis集群的搭建全过程
- 添加navbar以及上面的左右按钮代码
- kettle中通过 时间戳(timestamp)方式 来实现数据库的增量同步操作(一)
- IE6不完全支持!important
- Linux常见命令整理(一)
- Visual Studio 我的插件
- 简易发号SQL,可用于生成指定前缀自增序列,如订单号,生成优惠券码等
- 等高布局display:table
- python实现斐波那契数列
- ab参数详解 – 压力测试
- linux一切皆文件之tcp socket描述符(三)