C++ (第7天)

静态局部变量

在局部变量前加上“static”关键字,就成了静态局部变量

静态局部变量存放在内存的全局数据区。函数结束时,静态局部变量不会消失,每次该函数调用时,也不会为其重新分配空间。它始终驻留在全局数据区,直到程序运行结束。静态局部变量的初始化与全局变量类似.如果不为其显式初始化,则C++自动为其初始化为0。

原文链接:https://blog.csdn.net/pjh88/article/details/112303283

如果不适用静态局部作用域(local static scope)来创建一个单例类,那么创建某种静态的单例实例

#include <iostream>

class Singleton        //单例类——这个类只有一个实例存在
{
private:
    static Singleton* s_Instance;    //创建某种静态的单例实例
public:                                //返回一个引用
    static Singleton& Get() { return *s_Instance; };        //返回引用类型的Get静态方法  返回解引用后的实例

    void Hello() {}
};

Singleton* Singleton::s_Instance = nullptr;//全局声明这个实例  缺省设为nullptr

int main()
{
    
    Singleton::Get().Hello();
    std::cin.get();
}

效果相同

#include <iostream>

class Singleton        
{
public:                                
    static Singleton& Get()
    { 
        static Singleton instance;
        return instance;
    }        

    void Hello() {}
};

int main()
{
    
    Singleton::Get().Hello();
    std::cin.get();
}

枚举(enums)

enums就是一些值的集合,就是给特定值命名的一种方式,这样就不用到处处理各种整型数据了,

定义枚举类型的主要目的:增加程序的可读性。

enum 是 C++ 关键字,所以它必须小写,

数据类型本身的名字是以大写字母开头的。

(虽然这并非必须,但是绝大多数程序员都会釆用首字母大写的形式。)

enum Eaxample : unsigned char        //只能用整型,不能用float
{
    A = 5, B, C
};

默认情况下,编译器设置第一个枚举量为 0,下一个为 1,以此类推。

在上述示例中,A的值将是 5,B 的值为 6,等等。

#include <iostream>

class Log
{
public:
    enum Level  //通过设置Level类型来限制你的代码,只允许设置为Level的枚举值
    {
        LoglevelError = 0, LoglevelWarning, LoglevelInfo
    };

private:                //私有变量成员,代表设置的log级别
    Level m_Loglevel = LoglevelInfo;//m前缀一般表明这是一个私有的类成员变量

public:
    void SetLevel(Level level)    //通过设置Level类型来限制你的代码
    {
        m_Loglevel = level;
    }

    void Error(const char* message)    //打印信息到控制台
    {
        if (m_Loglevel >= LoglevelError)
            std::cout << "[ERROR]: " << message << std::endl;
    }

    void Warn(const char* message)    //打印信息到控制台
    {
        if (m_Loglevel >= LoglevelWarning)
            std::cout << "[WARNING]: " << message << std::endl;
    }

    void Info(const char* message)
        //Warn函数有一个字符串指针,使我们要打印的消息
        //const char*——字符串
    {
        if (m_Loglevel >= LoglevelInfo)
            std::cout << "[INFO]: " << message << std::endl;
    }

};

int main()
{
    Log log;
    log.SetLevel(Log::LoglevelError);  //log.LoglevelWarning这是一个整数,现在改成log::LoglevelError
                                       //因为LoglevelError的枚举值是在Log类命名空间,而枚举类型Level本身不是一个命名空间
    log.Warn("Hello!");
    log.Error("Hello!");
    log.Info("Hello!");
    std::cin.get();
}

构造函数

构造函数是一种特殊方法,它在类每次实例化的时候运行

#include <iostream>

class Entity
{
public:
    float X, Y; //用来表示Entity的位置

    void Print()
    {
        std::cout << X << "," << Y << std::endl;
    }

};

int main()
{
    Entity e;
    e.Print();
    std::cin.get();
}

我们需要在我们创建Entity实例的时候就自动把X和Y设置为0,除非我们显示设置为其他值

#include <iostream>

class Entity
{
public:
    float X, Y; //用来表示Entity的位置

    Entity()        //Entity的构造函数,不用再调用e.Init()函数
    {
        X = 0.0f;
        Y = 0.0f;
    }

    void Print()
    {
        std::cout << X << "," << Y << std::endl;
    }

};

int main()
{
    Entity e;
    e.Print();
    std::cin.get();
}

在c++中,必须手动初始化所有的基本类型,不然,机会吧设置为之前保留在内存中的值

函数重载——相同函数名有不同的参数不同版本函数

    Entity()        //Entity的构造函数,不用再调用e.Init()函数
    {
        X = 0.0f;
        Y = 0.0f;
    }

    Entity(float x, float y)
    {
        X = x;
        Y = y;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值