c++中的类

类是一个数据与函数的集合体。以游戏为例,如果我们用变量来描述游戏中人物的信息,我们需要描述他的坐标x,y表示他在屏幕中的位置,还有他移动的速度,如果我们要引入第二个玩家,那么就需要同样含义的变量来进行描述,同时名字还要与第一个任务的这些变量不同。引入类会使得工作更加简单。

#include<iostream>

#define Log(x) std::cout<<x<<std::endl

class Player
{
public:
    int x,y;//position
    int speed;
};

int main()
{
    Player player;
    player.x=5;
    
    std::cin.get();
}

如果不加public的话将x赋值为5的操作将会出错,因为类中的数据默认是私有类型(private),私有类类外是无法进行访问的,所以需要在数据前加上public。同时函数时可以定义在类内的

#include<iostream>

#define Log(x) std::cout<<x<<std::endl

class Player
{
public:
    int x,y;//position
    int speed;

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

int main()
{
    Player player;
    player.x=5;
    player.Move(-1,1);
    std::cin.get();
}

如果在类外写Move函数,则需要使用引用或者指针

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

class和struct的区别

在没有特殊说明的情况下,类内成员默认是私有的,而struct内的成员默认是公有的,这就是他们之间的区别。如果将类中的public去掉,那么程序就会报错类内成员不可访问,此时将class换成struct就好了,同样的,将struct中的变量前加上private,就会出现同样的错误。c++中之所以还存在结构体是为了维持和c语言的兼容性。因为c语言中没有类的概念,只有结构体,如果c++中删除结构体的概念,那么c++和c就会彻底失去兼容性。当然可以用宏定义来解决这个问题,比如

#define struct class

这样所有的struct就被替换成了class,但是私有和公有的问题仍然存在。什么时候使用结构体什么时候使用类呢?当建立一个新的数据结构,类似于向量,只包含x,y两个浮点数(float)时,用struct比较好,而我们要实现一个功能复杂的东西时,使用class显然更好。涉及到继承的时候也要用类而非结构体。

怎样在c++中写类

以一个分级输出的类别举例,通过类中的成员,来设置多级输出。

#include<iostream>

class Log
{
public:
    const int LogLevelError=0;
    const int LogLevelWarning=1;
    const int LogLevelInfo=2;
private:
    int m_LogLevel=LogLevelInfo;//m means this member is private
                                                //m_logLevel=LogLevelInfo, print everything
public:
    void setLevel(int 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)
    {
        if(m_LogLevel>=LogLevelInfo
            std::cout<<"[Info]"<<message<<std::endl;
    }
};

int main()
{
    Log log;
    log.setLevel(log.LogLevelWarning);//根据设置的LogLevel来实现不同的输出
    log.Error("Hello");
    log.Warn("Hello");
    log.Info("Hello");
    std::cin.get();
}
原文地址:https://www.cnblogs.com/wangtianning1223/p/12654672.html