C++ 语法笔记/散记
宏
ifndef + define + endif
用#pragma once即可!
如果__XXX_H__未定义,才会执行#define到#endif段的代码,防止重复定义。
#ifndef __MODEL_H__ // 如果 __MODEL_H__ 未定义
#define __MODEL_H__ // 定义 __MODEL_H__
// 头文件内容
class Model {
// 类定义
};
#endif // __MODEL_H__
模板template
// size_t: unsigned int in <cstddef>
// typename T: can be omitted, compiler can auto-infer the type, usually in the last like <arg, arg..., T>
// 将DIM维向量v补全为LEN维向量,多余的部分用fill填充
// 只要`入参`与template<>内重合,都能自动推导类型,如此处的DIM,T
template <size_t LEN, size_t DIM, typename T>
vec<LEN, T> embed(const vec<DIM, T> &v, T fill = 1) { // return_type embed(&v)
vec<LEN, T> ret;
for (size_t i = LEN; i--; ret[i] = (i < DIM ? v[i] : fill));
return ret;
}
类
virtual
=0 纯虚函数,子类必须实现此方法,此时IShader无法被实例化?
没有=0,一般都是父类也有实现方法
struct IShader {
virtual ~IShader();
virtual Vec4f vertex(int iface, int nthvert) = 0;
// bar: barycentric coordinates 重心坐标
virtual bool fragment(Vec3f bar, TGAColor &color) = 0;
};
销毁函数 ~Class_Name();
&func_name
- 重载运算符
- 链式调用,超过1次调用,如
MyClass.setA().setB();
class MyClass {
public:
MyClass &operator=(const MyClass &other) {
if (this != &other) {
// 执行赋值操作
}
return *this;
}
MyClass &setA(int a) {
this->a = a;
return *this;
}
};
内存
- varname = new char[255];
- delete[] varname;

浙公网安备 33010602011771号