C++兼容C语法。程序代码的组成是由变量/常量 与操作符组成的. 变量是由变量类型进行定义.
变量类型
基本变量
int
long
unsigned
int
char
boolean
可以通过typedef 进行类型的别名定义
typedef int MyInt
函数指针
返回类型 (*指针变量名)(参数列表)
定义函数指针
typedef void (*Myfunc) (int)
# 或者使用using定义
using Myfunc = void (*)(int)
操作符
1. 算术操作符
+ : 加法
- : 减法
* : 乘法
/ : 除法
% : 取余
2. 关系操作符
== : 等于
!= : 不等于
> : 大于
< : 小于
>= : 大于等于
<= : 小于等于
3. 逻辑操作符
&& : 逻辑与
|| : 逻辑或
! : 逻辑非
4. 位操作符
& : 位与
| : 位或
^ : 位异或
~ : 位取反
<< : 左移
>> : 右移
5. 赋值操作符
= : 赋值
+= : 加赋值
-= : 减赋值
*= : 乘赋值
/= : 除赋值
%= : 余赋值
&= : 位与赋值
|= : 位或赋值
^= : 位异或赋值
<<= : 左移赋值
>>= : 右移赋值
6. 自增和自减操作符
++ : 自增-- : 自减
7. 条件操作符
?: : 三元操作符
8. 成员访问操作符
. : 成员访问-> : 指针成员访问
9. 类型转换操作符
static_cast<type> : 静态类型转换
dynamic_cast: 动态类型转换const_cast: 常量类型转换reinterpret_cast` : 重新解释类型转换
10. 其他操作符
sizeof : 获取类型或变量的大小
typeid : 获取类型信息
, : 逗号操作符
11 操作符自定义
class Vector {
public:
Vector operator+(const Vector& other) const;
// ...
};
Vector Vector::operator+(const Vector& other) const {
Vector result;
// 实现向量相加的逻辑
return result;
}
类
类的概念与结构体类似,相对结构体而言多了类内部的函数(方法),权限的划分,重载,多台以及继承等相关概念. 在类的构造函数调用优先级是先创建父类,再构造子类成员对象,最后调用子类的构造函数,创建出该类本身.
结构体
结构体是一些变量的集合体,结构体的定义如下
struct Person {
std::string name;
int age;
float height;
};
也可以使用typedef定义别名
typedef struct {
std::string name;
int age;
} Person; // 为结构体定义别名 Person
其他
为了内存更加快速的访问,结构体在编译的时候,会进行优化,一般会有一个结构体对齐: 对齐分别有8,16,32 字节对齐方式.
结构体偏移逆向分析
结构体的首地址: 0x89962A23D4
偏移量计算: (var0 是上一个变量,var1是当前变量,zp是对齐方式),首地址偏移量为0
偏移量 = MIN(zp,sizeof(var0))*n - sizeof(var1)
n 值需要满足
MIN(zp,sizeof(var0))*n%zp == 0条件满足下的n最小值
偏移量 = 先前成员的结束地址 + 填充
填充的值,为凑成对齐的整数倍最小需要填充的大小.
对齐的目的是确保每一个成员变量,起始地址都是对齐大小的整数倍.逆向分析的时候,观察地址,如果后面连续性的地址都是某个数(8 16 32 )的整数倍,则可以考虑是一个结构体.
友元函数,友元类
友元函数(Friend Function)是 C++ 中的一种特殊函数,它可以访问类的私有成员和保护成员。友元函数并不是该类的成员函数,但可以被该类的对象调用。友元关系是单向的,意味着如果类 A 是类 B 的友元,类 B 并不能访问类 A 的私有成员。
#include <iostream>
class Box {
private:
double width;
public:
Box(double w) : width(w) {}
// 声明友元函数
friend void printWidth(Box box);
};
// 定义友元函数
void printWidth(Box box) {
// 可以访问 Box 的私有成员
std::cout << "Width of box: " << box.width << std::endl;
}
int main() {
Box box(5.0);
printWidth(box); // 调用友元函数
return 0;
}
友元类(Friend Class)是 C++ 中的一种特性,它允许一个类的所有成员函数访问另一个类的私有和保护成员。通过将一个类声明为另一个类的友元类,后者的所有成员函数都可以直接访问前者的私有数据。
#include <iostream>
class ClassB; // 前向声明
class ClassA {
private:
int valueA;
public:
ClassA(int val) : valueA(val) {}
// 声明 ClassB 为友元类
friend class ClassB;
};
class ClassB {
public:
void showValue(ClassA a) {
// 可以访问 ClassA 的私有成员
std::cout << "Value of A: " << a.valueA << std::endl;
}
};
int main() {
ClassA a(10);
ClassB b;
b.showValue(a); // 调用友元类的方法
return 0;
}