C++—Cherno
一、C++中的引用
#include<iostream>
#include"Log.h"
void Increment(int& value) {
value++;
}
int main()
{
int a = 5;
int b = 10;
//引用不能只声明不赋值
//&就和数据类型差不多,要和int写在一起,int&
int& ref = a;
ref = b;
Increment(ref);
Log(a);
Log(ref);
/*
引用直接赋值一次
int& ref = a;
ref = b;
这是不正确的,这样会把b的值赋值给a,就是a等于10,b等于10
*/
}
二、类
#include<iostream>
#include"Log.h"
class Player
{
public:
//默认情况下是private
int x, y;
int speed;
void Move(int arg1, int arg2) {
x = x * arg1;
y = y * arg2;
}
};
int main() {
Player player;
player.x = 2;
player.y = 3;
player.Move(2, 3);
std::cout << "x=" << player.x << std::endl;
std::cout<< "y=" << player.y << std::endl;
}
不需要刻意的去写类,类只是糖衣炮弹,辅助程序员的,没有类也能很好的去用,只有C也不是不能用。
三、结构体和类
几乎没有区别,唯一区别是,默认情况下,类是私有的,如果你没有指定任何可见的修饰符,类的成员是不可见的。
struct默认是公有的。
如果仅仅是为了表示一些数据,我会用结构体struct
如果是实现一个比较复杂的类,有很多功能,又要继承,我会用class
四、如何写一个C++类
#include<iostream>
#include"Log.h"
/*
message大部分情况下是无用的信息,一般不需要输出
任务:
1、如果当前日志级别为0,则只输出Info信息
2、如果当前日志级别为1,则不打印Info级别的信息
3、如果当前日志级别为2,则只输出Error信息
*/
class LOG
{
public:
int info = 0;
int warning = 1;
int error = 2;
private:
//默认情况下当前日志的提示等级是警告
int currentLevel = warning;
//func
public:
void setLevel(int level)
{
currentLevel = level;
}
//Info
void Info(const char* message) {
if(currentLevel == info)
std::cout << "【Message】" << message << std::endl;
}
//Warn
void Warn(const char* message) {
if(currentLevel == warning)
std::cout << "【Warning】" << message << std::endl;
}
//Error
void Error(const char* message) {
if(currentLevel >= warning)
std::cout << "【Error】" << message << std::endl;
}
};
int main() {
LOG log;
log.setLevel(log.warning);
log.Info("你好");
log.Warn("你好");
log.Error("你好");
}