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;
posted @ 2025-01-17 16:34  Nolca  阅读(15)  评论(0)    收藏  举报