C++ 类

OrzMiku / 2023-08-20 / 原文

类是一种把数据和功能结合在一起的方法。

使用class来定义一个类,像这样:

class Player{ // 创建一个Player类
    int x = 0, y = 0;
    int speed = 1;
};

通过类创建一个对象(实例化),像这样:

Player player;

成员变量

可以使用点(.)来访问对象的属性。

player.speed = 2;

但这个代码是错误的。在没有声明的情况下,类中的变量默认是私有的(private)。你无法在外部访问或者改变他。可以将class修改为:

class Player{ // 创建一个Player类
public: // public 意味着我们可以在类以外的任何地方访问这些变量   
    int x = 0, y = 0;
    int speed = 1;
};

成员方法

假设我们的player需要move函数来移动。我们可以使用成员方法。

先看看不用成员方法的move函数:

void Move(Player& player, int xa, int ya){
    player.x += xa * player.speed;
    player.y += ya * player.speed;
}

Move(player, 2, 3); // 调用

然后是成员方法move:

class Player{
	... // 成员方法写在类内部
public: 
    void Move( int xa, int ya){
        x += xa * speed;
        y += ya * speed;
    }
    ... // 成员方法写在类内部
}

player.Move(2, 3); // 调用

总结

类是一种把数据和功能结合在一起的方法。

例子中:Player是玩家类,他是把玩家坐标和玩家速度(数据)和移动(功能)结合在一起的方法。这种编程方法极好的简化了代码,也不会让变量看起来杂七杂八,更容易阅读,更加方便。

实战

简单的Log日志类

#include <iostream>

using namespace std;

class Log{
public:
    // 三种日志显示等级,常量,用于设置等级是传参
    const int ErrorLevel = 0;
    const int WarnLevel = 1;
    const int InfoLevel = 2;
private:
    // 当前的等级,默认是全部输出
    int m_MsgLevel = InfoLevel;
public:
    void setLevel(const int level){
        // 设置等级方法
        m_MsgLevel = level;
    }
    void error(const char * msg){
        // 错误日志输出方法
        if(m_MsgLevel >= ErrorLevel)
            cout << "[ERROR]: " << msg << endl;
    }
    void warn(const char * msg){
        // 警告日志输出方法
        if(m_MsgLevel >= WarnLevel)
            cout << "[WARN]: " << msg << endl;
    }
    void info(const char * msg){
        // 普通信息日志输出方法
        if(m_MsgLevel >= InfoLevel)
            cout << "[INFO]: " << msg << endl;
    }
};

int main()
{
    // 调用测试
    Log log;
    log.setLevel(log.WarnLevel);
    log.warn("Said TvT Warning!");
    log.info("Lol =v= Infomation!");
    log.error("Oops! Error!");
    return 0;
}