新闻详情

新闻详情

首页 / 资讯中心 / 详情

ceres中遇到的C++(1)

发布时间:2026/9/27 6:19:27来源:尧图网络
ceres中遇到的C++(1)
1结构体struct结构体与类很像就像是只要public的class。所以C中的结构体也是可以放函数的这是与C的最大不同点。如一下代码。#include hello.h//自己定义的头文件用 #include iostream//标准库的头文件用 using namespace std; struct demo1 { int a; void print_a() { cout a endl; } }; int main(int argc,char **argv) { demo1 test; test.a 10; test.print_a(); }2运算符重载运算符重载是解决自定义类型数据无法使用一些内置运算符的问题。他的本质是一个函数他有两种形式一种是友元重载另一种是类重载具体区别是你的具体实现是不是成员函数方式实现现在说明类重载的方式。解释重载。比如int abab这样是允许的。但是如果ab都是结构体的对象那么ab是不被允许的但是现在可以通过运算符重载让对象ab也能进行ab。语法函数返回值 operator 运算符{ }可以把opertor 运算符 整体看成是函数名。例如如下代码。#include hello.h//自己定义的头文件用 #include iostream//标准库的头文件用 using namespace std; struct demo1 { int a; bool operator()(int c , int b) { int sum c b; cout sum endl; return true ; } }; int main(int argc,char **argv) { demo1 test; bool d test(10,20); cout d endl; demo1 test2; demo1 *p test2; (*p)(20,30); }注原先( ) 运算符是函数调用经常被用到但是结构体的对象是不能用的。现在我们想让结构体的对象可以像调用函数一样使用那么我们可以重载( ) 运算符。所以我们在结构体的内部写了一个运算符的重载函数该函数实现的是输入两个参数并计算求和打印。随后我们通过定义一个类的对象然后用对象就是可以像函数一样去使用。当然你一可以使用指针的方式去调用。3.constconst经常用来表明某个数据不能改变但是其用法存在的许多细节之处还需要补充。比如const double *const abc分成两步来看首先 double *const abcdouble * abc指的是定义一个指针变量里面可以存放数据类型为double的地址现在在abc前面加了一个const修饰的是anc本身表示abc初始化之后就不能改变他的值比如double *const abc b; abc c //后面这第二次赋值是不被允许的因为abc被const所修饰。第二步const double *const abc这时候最外边的const表示的是abc所指向的内容不能通过变量abc去修改。比如const double *const abc b; *(abc) 10;这件事情是不被允许意思是abc去了b的地址但是被最前面的const修饰之后现在不能通过变量abc去修改这个地址里面的内容但是其他变量是可以的。比如以下代码是报错的写法。以下代码是通过其他变量修改其值的写法。为什么会这样我的理解是变量b没有被const修饰所以他并不是一个常值而后续的abc被const修饰所以就限定了变量abc的行为但其数据本身的性质没有改变。补充const double *const abc虽然我们说不能改变abc的值但可以用它的值临时去做一些计算从而可以访问其他地址的内容(因为本质上也没改变原先的值)。例如以下代码。#include hello.h//自己定义的头文件用 #include iostream//标准库的头文件用 using namespace std; int main(int argc,char **argv) { double b[2] {10,20}; const double *const abc b; for(int i 0 ; i 2;i) { cout abc[i] endl; } }(4)new动态内存分配new运算符可以用来申请并分配内存空间并且返回这片内存空间的首地址。常见语法格式。new type 申请普通变量空间。new type【n】申请数组空间。现在主要是针对ceres使用中new的具体使用案例来理解new的使用。如下代码。#include hello.h//自己定义的头文件用 #include iostream//标准库的头文件用 using namespace std; struct Student { double age; }; int main(int argc,char **argv) { Student s; s.age 20; Student *p new Student; (*p).age 10; cout (*p).age endl; cout s.age endl; }注释一开始是普通的创建了一个结构体的对象s并且用让对象s赋值里面的age为10。后续用new Student 在动态内存中创建了一个Student对象并且返回这个对象的地址这个地址交给了p然后通过指针的方式去操作这个对象。 补充一般会delet释放空间就是当你用完了不在用了记得delet释放这片空间。语法结构 结构体类型 *指针 new 结构体类型。进阶版一模版放里边。如果模版放外边那么此时修饰的是整个struct那么strcut里面都可以使用。但是如果放在里面那么就是要在调用的地方的上一行加上并且中间不能有其他东西如果第二个函数想用那么得给第二个函数配套定义一个。使用的时候也有所区别1.如果是定义在外边通常在定义对象的时候需要加上如果定义在里面的时候则不需要加上。2.定义在里面的当你传入参数的时候他会自动推到类型比如这里的*p(6)我传了一个整数6进去那么他会根据我传入的这个数据自动推导出相应的类型做匹配所以这时候的T就是int类型。#include hello.h//自己定义的头文件用 #include iostream//标准库的头文件用 using namespace std; struct Student { templatetypename T void operator()(T b) { cout b endl; } }; int main(int argc,char **argv) { Student s; Student *p new Student; s(5); (*p)(6); }struct Foo { templatetypename T void f1(T a) { } // ← 上面那行 template 只管 f1 templatetypename U // ← f2 要再写一次参数名可以不同 void f2(U b) { } // ← 这行只管 f2 void f3() { } // ← 不是模板不需要 template };进阶版二增加了构造函数和作为一个模版结构体。#include hello.h//自己定义的头文件用 #include iostream//标准库的头文件用 using namespace std; templatetypename T struct Student { T age; Student (T a) : age(a) {} void operator()(T b) { cout b endl; } }; int main(int argc,char **argv) { Studentdouble s(1); Studentdouble *p new Studentdouble(2); s(3); (*p)(4); }
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

GitHub Desktop 自定义 ESLint 规则全解析:从规则目录到源码与测试实践 2026/9/27 7:11:34

GitHub Desktop 自定义 ESLint 规则全解析:从规则目录到源码与测试实践

开发工具桌面应用 【免费下载链接】desktop Fork of GitHub Desktop to support various Linux distributions 项目地址: https://gitcode.com/gh_mirrors/des/desktop 点击查看 免费下载 本篇技术指南围绕 GitHub Desktop(desktop/desktop)…

阅读更多 →
制作php网站必看5大安全注意事项防被黑 2026/9/27 7:11:28

制作php网站必看5大安全注意事项防被黑

制作php网站必看5大安全注意事项防被黑 不会写代码却想独立做网站,最怕的就是上线后半夜收到报警,发现后台被篡改、数据库被拖库。很多老板觉得PHP网站便宜、开发快,但正因为门槛低,攻击者最爱盯着这类站点下手。做PHP网站不是写完代码就完事,…

阅读更多 →
滨州装修开工前必做的 7 件事,少一件都容易耽误工期 2026/9/27 7:11:27

滨州装修开工前必做的 7 件事,少一件都容易耽误工期

很多滨州的朋友拿到新房钥匙,急着赶紧开工装修,恨不能当天就砸墙,结果开工没两天就因为手续不全被叫停,要么就是没准备好耽误工期。其实装修开工前的准备工作特别重要,准备做足了,后面才能顺顺利利&#xf…

阅读更多 →
从零实现 C++ AI 大模型接入 SDK(六):ChatGPTProvider 与 Responses API 全量/流式实现 2026/9/27 7:11:27

从零实现 C++ AI 大模型接入 SDK(六):ChatGPTProvider 与 Responses API 全量/流式实现

目录 前言 一、第二个 Provider 才真正检验抽象 1.1 当前 ChatGPTProvider 的基本信息 二、Responses API 的请求怎么构造 2.1 Message[] 怎么变成 input[] 2.2 SDK 的 max_tokens 怎么映射到 max_output_tokens 2.3 参数读取失败时,不让整个请求直接崩掉 三…

阅读更多 →
做网站的服务器怎么选?3个免费工具教你避开建站坑 2026/9/27 7:11:14

做网站的服务器怎么选?3个免费工具教你避开建站坑

做网站的服务器怎么选?3个免费工具教你避开建站坑 改个需求建站公司拖一周?别急,这通常不是代码写不出来,而是服务器性能拖了后腿,或者架构没搭对。很多甲方朋友以为服务器就是买个盒子,其实里面的门道比选显卡还多。今天不讲虚的,直接上干货,教你用…

阅读更多 →
肥西上派网站开发避坑指南:代码漏了?选哪家看这5点 2026/9/27 7:11:08

肥西上派网站开发避坑指南:代码漏了?选哪家看这5点

肥西上派网站开发避坑指南:代码漏了?选哪家看这5点 网站做好了没人访问?别急着换SEO,先查查是不是被黑了。很多老板在找 肥西上派网站开发 团队时,只盯着价格和设计图,问一句 哪家好…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉