C++中的结构体内的函数

        在C++中除了类中可以有构造函数和析构函数外,结构体中也可以包含构造函数和析构函数,这是因为结构体和类基本雷同,唯一区别是,类中成员变量默认为私有,而结构体中则为公有。注意,C++中的结构体是可以有析构函数和构造函数,而C则不允许。而共用体,它是不可能有析构函数和构造函数的。结构体变量所占内存长度是各成员占的内存长度之和,每个成员分别占有自己的内存单元。共用体变量所占的内存长度等于最长的成员的长度。即它是一种内存覆盖,也就是说,同一块内存在不同的时刻存储不同的值(可以是不同的类型)。

以下为opencv2.4.9中对结构体DMatch的定义:

struct CV_EXPORTS_W_SIMPLE DMatch
{
    CV_WRAP DMatch() : queryIdx(-1), trainIdx(-1), imgIdx(-1), distance(FLT_MAX) {}
    CV_WRAP DMatch( int _queryIdx, int _trainIdx, float _distance ) :
            queryIdx(_queryIdx), trainIdx(_trainIdx), imgIdx(-1), distance(_distance) {}
    CV_WRAP DMatch( int _queryIdx, int _trainIdx, int _imgIdx, float _distance ) :
            queryIdx(_queryIdx), trainIdx(_trainIdx), imgIdx(_imgIdx), distance(_distance) {}

    CV_PROP_RW int queryIdx; // query descriptor index
    CV_PROP_RW int trainIdx; // train descriptor index
    CV_PROP_RW int imgIdx;   // train image index

    CV_PROP_RW float distance;

    // less is better
    bool operator<( const DMatch &m ) const
    {
        return distance < m.distance;
    }
};

  • 6
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C++ ,你可以使用文件流(fstream)和结构体指针来将结构体的内存写入文件。下面是一个示例代码,展示了如何将结构体的内存写入文件: ```cpp #include <iostream> #include <fstream> struct MyStruct { int value1; float value2; std::string value3; }; int main() { MyStruct myStruct = {42, 3.14, "Hello, World!"}; // 创建文件流对象并打开文件 std::ofstream file("data.bin", std::ios::binary); if (!file) { std::cout << "无法打开文件" << std::endl; return 1; } // 将结构体的内存写入文件 file.write(reinterpret_cast<char*>(&myStruct), sizeof(MyStruct)); // 关闭文件 file.close(); return 0; } ``` 在上述代码,我们首先定义了一个名为 `MyStruct` 的结构体,并初始化一个结构体变量 `myStruct`。 然后,我们使用 `std::ofstream` 创建一个文件流对象,指定打开模式为二进制写入(`std::ios::binary`)。如果文件无法打开,会输出一条错误消息并返回。 接下来,我们使用 `write` 函数结构体变量 `myStruct` 的内存写入文件。`write` 函数接受两个参数:要写入的内存的地址(使用 `reinterpret_cast` 进行类型转换),以及要写入的字节数(使用 `sizeof` 获取结构体的大小)。 最后,我们使用 `close` 函数关闭文件。 通过这样的方式,你可以将结构体的内存写入文件。请注意,读取时需要确保结构体的成员变量的类型和顺序与写入文件时的顺序相匹配。 希望这可以帮助你!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值