Day11
结构体(struct)
结构体(struct)和类(class)的区别
struct和class基本上没有区别,他们唯一的区别:class不指定任何访问修饰符例如public这种,默认就是私有的(private),外部无法直接访问,而struct默认为公共的(public),可以直接访问。
class Player
{
int x, y;
int speed;
void Move( int xa, int ya)
{
x += xa * speed;
y = ya * speed;
}
};
struct PlayerS
{
int x, y;
int speed;
void Move(int xa, int ya)
{
x += xa * speed;
y = ya * speed;
}
};
int main(){
Player player;
PlayerS players;
player.Move(1, -1);
players.Move(1, -1);
std::cin.get();
}
你进行编译会得到如下错误:
如何定义struct和class两个词之间的差别(建议)
c++中还有struct这个关键词是因为为了保持和c的兼容性。struct仅仅是为了用来操作变量,当需要进行复杂例如玩家在地图上如何移动、接受键盘的输入等等这些建议使用类。struct只是为了使我们的代码更易于使用。另外还有一个概念就是继承,从继承的角度来说,对结构体使用继承就增加了复杂性,我们希望结构体尽可能的简单,仅仅是数据的结构体。
类(Class)
如何写简单一个类
class Log
{
public:
const int LogLevelError = 0;
const int LogLevelWarning = 1;
const int LogLevelInfo = 2;
private:
int m_LogLevel=LogLevelInfo;
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);
log.Warn("Hello!");
std::cin.get();
}
我们编译后就是: 在加上下面这些
int main(){
Log log;
log.SetLevel(log.LogLevelWarning);
log.Warn("Hello!");
log.Error("Hello!");
log.Info("Hello!");
std::cin.get();
}
结果为:
|