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

Posted 木鸟飞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++与c不太相同的一些地方2相关的知识,希望对你有一定的参考价值。

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

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

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

说到extern 就稍微扩展一下吧。还有就是在CC++混合编程的时候,把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(9);//有参构造
    MyClass myClasses[3] = {MyClass(1),MyClass(2),MyClass(3)};//对象数组的实例化。
    cout << "Hello World!" << endl;
    return 0;
}

单例设计模式:

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

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 0;
}

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

 

以上是关于c++与c不太相同的一些地方2的主要内容,如果未能解决你的问题,请参考以下文章

Processing 与 C 相同和不同的地方

C++ 定义/赋值语法

GLSL/C++:自定义着色器的默认行为

c++ 类包含一个与自身类型相同的静态成员。为啥是这种模式?

与 C 和 C++ 相比,为啥 c# 代码需要很长时间才能执行 [关闭]

C++ - 指针和“智能指针”