首页 > 编程语言 >c++学习经验总结

c++学习经验总结

时间:2023-07-24 19:32:22浏览次数:137  
标签:IMPIVSInterface 函数 int 成员 c++ 学习 C++ 指针 经验总结

1.关于结构体中定义函数
在C++中,结构体中定义函数没问题
在C中, 则不行。会报expected specifier-qualifier-list before...

2.在C++中,结构体与类的区别:
在C++中,结构体是一种特殊形态的类。 结构体和类的唯一区别就是: 结构体和类具有不同的默认访问控制属性。

3.C与C++中结构体的区别:
一、相同之处:结构体中可以包含函数;也可以定义public、private、protected数据成员;定义了结构体之后,可以用结构体名来创建对象。但C中的结构体不允许有函数;也就是说在C++当中,结构体中可以有成员变量,可以有成员函数,可以从别的类继承,也可以被别的类继承,可以有虚函数。

二、不同之处:结构体定义中默认情况下的成员是public,而类定义中的默认情况下的成员是private的。类中的非static成员函数有this指针,(而struct中没有是错误的,一直被误导啊,经过测试struct的成员函数一样具有this指针),类的关键字class能作为template模板的关键字 即template<class T> class A{}; 而struct不可以。

实际上,C中的结构体只涉及到数据结构,而不涉及到算法,也就是说在C中数据结构和算法是分离的,而到C++中一类或者一个结构体可以包含函数(这个函数在C++我们通常中称为成员函数),C++中的结构体和类体现了数据结构和算法的结合.

4.关于C++ 类中的this 指针
1).this指针的经典描述:
当你进入一个房子后,   
你可以看见桌子、椅子、地板等,   
但是房子你是看不到全貌了。   
对于一个类的实例来说,   
你可以看到它的成员函数、成员变量,   
但是实例本身呢?   
this是一个指针,它时时刻刻指向你这个实例本身
.this 指针的特点:

1)this只能在成员函数中使用。指向被调用函数所在的类实例的地址

    全局函数、静态函数都不能使用this,

2)this在成员函数的开始前构造,在成员函数的结束后清除。

 生命周期:同任何一个函数的参数一样
   实际上,成员函数默认第一个参数为T * const this。

  当对一个对象调用成员函数时,编译程序先将对象的地址赋给this指针,然后调用成员函数,每次成员函数存取数据成员时,由隐含使用this指针。
   如:class A
      {
       public:
       int func(int p)
        {}
       };
其中,func的原型在编译器看来应该是: int func(A * const this,int p); 

this指针被隐含地声明为: X *const this,这意味着不能给this 指针赋值;

3)一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。

4)我们只有获得一个对象后,才能通过对象使用this指针

更进一步:在c语言的结构体中,也可以模拟C++ interface的行为, this 指针的使用如下:
typedef struct IMPIVSInterface IMPIVSInterface;

struct IMPIVSInterface {
	void  *param;													/**< 输入参数 */
	int   paramSize;												/**< 参数空间大小 */
	IMPPixelFormat pixfmt;											/**< 算法需要数据格式 */
	int  (*init)(IMPIVSInterface *inf);								/**< 初始化函数 */
	void (*exit)(IMPIVSInterface *inf);								/**< 注销函数 */
	int  (*preProcessSync)(IMPIVSInterface *inf, IMPFrameInfo *frame);/**< 预处理函数,不对传入此函数的frame额外加锁,故无需free frame,返回值:>=0 正确,<0:错误 */
	int  (*processAsync)(IMPIVSInterface *inf, IMPFrameInfo *frame);/**< 处理函数, SDK IVS 模块对传入此函数的frame 额外加了锁,故此函数必须在该frame使用完毕后尽快使用free_data函数解锁; 此函数是必须实现的函数,算法结果由此函数产生;返回值:0->实际检测正常返回,1->跳帧检测正常返回,-1->错误 */
	int  (*getResult)(IMPIVSInterface *inf, void **result);			/**< 获取结果资源 */
	int  (*releaseResult)(IMPIVSInterface *inf, void *result);		/**< 释放结果资源 */
	int	 (*getParam)(IMPIVSInterface *inf, void *param);			/**< 获得算法参数 */
	int	 (*setParam)(IMPIVSInterface *inf, void *param);			/**< 设置算法参数 */
	int	 (*flushFrame)(IMPIVSInterface *inf);						/**< 释放由外部通过processAsync输入给算法后被缓存的所有frame */
	void *priv;														/**< 私有变量 */
};

标签:IMPIVSInterface,函数,int,成员,c++,学习,C++,指针,经验总结
From: https://blog.51cto.com/danielllf/6838301

相关文章

  • Python学习笔记:递归、闭包以及装饰器
    一、首先,什么是递归?首先,简单来说递归就是在运行的过程中不断调用自身,从而完成“递”和“归”两个过程。在Python当中递归函数也是这个道理,通过直接或者间接调用函数本身就叫递归函数。注:在Python中编写递归函数一定要有结束条件否则会导致内存溢出。1、Python案例:​ 首先......
  • (数据科学学习手札153)基于martin的高性能矢量切片地图服务构建
    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes1简介大家好我是费老师,在日常研发地图类应用的场景中,为了在地图上快速加载大量的矢量要素,且方便快捷的在前端处理矢量的样式,且矢量数据可以携带对应的若干属性字段,目前主流的做法......
  • 线性 DP、背包问题、区间 DP 学习笔记
    动态规划基础知识基本概念动态规划:解决多阶段决策过程最优化问题的一种方法。阶段:把问题分解成相互联系的有顺序的几个环节,这些环节即成为阶段。状态:某一阶段的出发位置称为状态。通常一个阶段包含若干状态。决策:从某阶段的一个状态演变到下一个阶段某状态的选择。策略:由开......
  • 树状数组学习笔记
     树状数组真的很精美,码量小,还很快,比线段树快多了[滑稽]。一维树状数组单点修改,区间查询例题:loj#130.树状数组1louguP9974【模板】树状数组1不多说,代码:#include<bits/stdc++.h>usingnamespacestd;constintN=5e5+5;intn,m,c[N];intlowbit(intk){......
  • POI和 easyExcel学习
    POI-Excel写<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://......
  • ChatGPT学习笔记2
    前排提醒,本文内容重点是打卡学习,也就是本人自用的笔记,可能逻辑会不太清晰,如果是有心想要学习的话,可以去看看大佬整理的这笔记目录前言《条件是否满足》《给定步骤来补全》《让模型先梳理再给结论》前言今天来进行昨天所说的实践。于我而言,学习的过程就是了解->动手尝试->发现......
  • 尚硅谷 k8s 学习笔记
    K8S进阶部分       1.Deployment部署           1.1自愈能力           1.2多副本           1.3扩容、缩容           1.4滚动更新           1.5版本回退           1.6工作负载  ......
  • 128MTT 学习笔记
    标题是我乱起的名字。在做某题时受到了启发,想出了一种之前没听说过的MTT,在某谷上一问发现有人和我想的一样,立马去学了。这种方法,我叫它128MTT,它用到了科技__int128。主要思想就是找一个\(10^{27}\)以上的大NTT模数,全程使用__int128做NTT。然而longlong取模尚能用......
  • Blazor学习之旅(5)数据绑定
    大家好,我是Edison。本篇,我们来了解下在Blazor中数据是如何绑定的。关于数据绑定如果希望HTML元素显示值,可以编写代码来更改显示内容。如果值发生更改,则需要编写额外的代码以更新显示内容。在Blazor中,可以使用数据绑定将HTML元素连接到字段、属性或表达式。这样,当值发生......
  • TED Talk 学习笔记
    Howtospeaksothatpeoplewanttolisten|JulianTreasureAvoid:gossipjudgingnegativitycomplaning:viralmiseryexcuseslying:embroidery,exaggerationdogmatism:bombardsomebodyCornerstones/Foundations:HAIL,togreetoracclaimenthusiasitcal......