首页 > 编程语言 >C++ 类

C++ 类

时间:2023-08-20 16:34:29浏览次数:49  
标签:const Player int C++ player speed class

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

使用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;
}

标签:const,Player,int,C++,player,speed,class
From: https://www.cnblogs.com/orzmiku/p/17644197.html

相关文章

  • C++ 类和结构体内外的Static
    类和结构体外的Static这里的static指的是在类外的static,意味着你要声明的是static的符号,链接将只在内部。(换句话说作用域只在他所在的.cpp文件)。下面是几组例子来理解:例子1:main.cpp#include<iostream>usingnamespacestd;voidfun(){cout<<"fun()inmain.cpp"......
  • C++ 继承
    继承一个类可以继承另一个类,避免了代码复写。被继承的类被叫做基类,继承的类叫做派生类。(或者说是父类和子类)继承类型当一个类派生自基类,该基类可以被继承为public、protected或private几种类型。继承类型是通过上面讲解的访问修饰符access-specifier来指定的。我们几乎......
  • C++ 构造函数与析构函数
    构造函数和析构函数构造函数构造函数会在实例化对象的时候执行,可以在实例化时传入参数。构造函数没有返回值。不需要声明返回值。构造函数的函数名与类名保持一致。//classname:PlayerPlayer(intxa=0,intya=0){//构造函数,传入初始坐标进行初始化......
  • C++ 变量初始化总结
    堆空间,new操作初始化1、对于有自己写构造函数的类,不论类型名后面有没有括号()或者数组[],都用构造函数进行初始化,如果构造函数delete,则编译报错;2、如果没有构造函数,则不加括号的new只分配内存空间,不进行内存的初始化,3、而加了括号()的new会在分配内存的同时初始化为0。栈空间......
  • c++基础入门
    1.安装g++编译器是编译C++代码使用的编译器,不要使用gcc了。在用户目录中单独创建一个文件夹存放下载后的3个安装文件,然后进入到目录中执行下面命令cd文件夹sudodpkg-i*.deb本地安装sudoapt-getinstallg++在线安装2.C++的语言特点及优势cwithclass(类)cplusplus大型......
  • c++算法之动态规划:01背包
    什么是动态规划?动态规划算法(dynamicprograming),是一种由递推为基础的比贪心更稳定的一种优化策略,为运筹学的一部分。就是通过以递推为基础的手段非暴力求出最值。它的总体思想其实就是一个比较过程:假如你有一个数据,它的价值是x,代价为y,如果用动态规划就是和你不加这个元素和你加......
  • C/C++ 中 static 关键字解析
    局部静态变量的特点:全局数据区执行到函数内对象声明处首次初始化,若没有显示初始化,自动初始化为0,且只初始化一次始终驻留在全局区,直到程序结束,作用域为局部作用域,在函数或语句块内,生命周期到程序结束全局静态变量的特点:全局区在main函数执行前分配内存并初始化注意:......
  • 使用WebAssembly实现高性能计算:C++和Rust的案例分析
    WebAssembly是一种新型的低级字节码格式,它可以在浏览器中运行高效的编译代码。使用WebAssembly可以实现高性能计算、游戏引擎等功能,对于需要大量计算的Web应用程序来说尤为重要。本文将介绍使用WebAssembly实现高性能计算的两个案例:C++和Rust。C++C++是一种高性能的编程语言,它......
  • C++入门:内联函数
    1.概念以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。如果在上述函数前增加inline关键字将其改成内联函数,在编译期间编译器会用函数体替换函数的调用。查看方式:1.在release模式下,查看编译器生成......
  • C++ 突袭
    基本知识必须在函数声明中声明默认参数!默认参数必须在形参列表的结尾!避免歧义函数声明就是函数的身份证,外部调用方不看定义只看声明和取地址类似函数overload函数重载要求:函数的名字相同参数列表(数量,类型)不同注意:与返回值无关问题--避免overlo......