【编程语法-C++】课堂总结17-20
引用
引用不会创建新的变量,会修改原始值。
int a = 5;
int& ref = a;
ref = 2;
std::cout<<a<<std::endl; // a会变成2
def Increase1(int a){
a++;
}
def Increase2(int& a){
a++;
}
Increase1(a)
std::cout<<a<<std::endl; // a还是2,因为这个函数并没有改变外部的值
Increase2(a)
std::cout<<a<<std::endl; // a变成3,因为引用可以实际改变该内存位置上的值指针重新指向时,需要先解引用
a = 4; b = 4; int* ptr = &a; *ptr = 2; // 解引用 ptr = &b; *ptr = 1; // a=2, b=1
类
class Player
{
public:
int x, y;
int speed;
void move(int xa, int ya)
{
x += xa * speed;
y += ya * speed;
}
}
Player p1; //实例化
p1.x = 0; //这儿能执行的前提是成员变量的访问属性已经变成公有的
p1.move(-1,1);struct和class区别
实际上区别很小,只有一个区别,class的属性默认是私有的,而struct默认是共有的,不用人为再加修饰符。
c++保留struct的原因是因为维持和c的兼容性,因为c中没有类,但c有struct结构体,所以如果我们删除struct就会失去所有兼容性。因为c++的编译器此时就不知道struct是什么。当然此时可以使用“#define struct class”来修复。
一般在实际编程过程中,有以下几点不同(但从技术层面上是没什么区别的):
- struct我们一般只作为一系列简单变量的操作,而class在此基础上会有更加丰富的属性和功能。
- 一般struct不会用于继承。
创建一个基础的打印类
class Log
{
public:
const int LogLevelError = 0;
const int LogLevelWarning = 1;
const int LogLevelInfo = 2;
private:
int loglevel = LogLevelInfo;
public:
void SetLevel(int level)
{
loglevel = level;
}
void Error(const char* message)
{
if (loglevel>=LogLevelError)
std::cout << "[ERRO]: " << message << std::endl;
}
void Warn(const char* message)
{
if (loglevel>=LogLevelWarning)
std::cout << "[WARN]: " << message << std::endl;
}
void Info(const char* message)
{
if (loglevel>=LogLevelInfo)
std::cout << "[INFO]: " << message << std::endl;
}
}; //记得加分号
查看27道真题和解析