C++小结 析构函数、函数后面接冒号 等等

2023-05-16

讲在前面

本小结有析构函数、C++函数后面接:的含义 、C++中public、protected及private用法、条件运算符、fabs()和abs()区别、C++中的结构体内的函数、类中成员函数声明后面接 const、C++中函数定义前加virtual关键字的作用。

析构函数

析构函数主要作用就是释放资源,避免内存泄漏。析构函数与构造函数对应,当对象结束其生命周期,如对象所在的函数已调用完毕时,系统会自动执行析构函数。析构函数名也应与类名相同,只是在函数名前面加一个位取反符 ~,例如 ~stud( ),以区别于构造函数。它不能带任何参数,也没有返回值(包括void类型)。只能有一个析构函数,不能重载。

如果一个类中有指针,且在使用的过程中动态的申请了内存,那么最好显示构造析构函数在销毁类之前,释放掉申请的内存空间,避免内存泄漏。

按照 C++ 的要求,只要有 new 就要有相应的 delete 。这专个 new 是在构造函数里 new 的,就是出生的时候。所以在死掉的时候,就是调用析构函数时,我们必须对指针进行 delete 操作。
array new 一定要搭配 array delete ,即delete[]

C++函数后面接:的含义

c++成员函数后面跟“:”表示的是赋值,这是c++的特性
还有就是:构造函数中第二种初始化语法–成员初始化列表

A( int aa, int bb ):a(aa),b(bb)
{
}
//相当于
A( int aa, int bb )
{
a=aa;
b=bb;
}

构造函数后加冒号是初始化表达式:
有四种情况下应该使用初始化表达式来初始化成员:
1:初始化const成员
2:初始化引用成员
3:当调用基类的构造函数,而它拥有一组参数时
4:当调用成员类的构造函数,而它拥有一组参数时。

冒号初始化是给数据成员分配内存空间时就进行初始化,就是说分配一个数据成员只要冒号后有此数据成员的赋值表达式(此表达式必须是括号赋值表达式),那么分配了内存空间后在进入函数体之前给数据成员赋值,就是说初始化这个数据成员此时函数体还未执行。 对于在函数中初始化,是在所有的数据成员被分配内存空间后才进行的。

student ::student (int i,int j)
  {
     a=i;
     b=j;
   }
student ::student(int i,int j):a(i),b(j)
{
}

ConvexMPCLocomotion::ConvexMPCLocomotion() :
  horizonLength(10),//函数名后加冒号,相当于开了一个内存赋值的作用
  trotting(horizonLength, Vec4<int>(0,5,5,0), Vec4<int>(5,5,5,5),"Trotting"),  //这里是赋值
  bounding(horizonLength, Vec4<int>(5,5,0,0),Vec4<int>(5,5,5,5),"Bounding"),
  pronking(horizonLength, Vec4<int>(0,0,0,0),Vec4<int>(4,4,4,4),"Pronking"),
  galloping(horizonLength, Vec4<int>(0,2,7,9),Vec4<int>(6,6,6,6),"Galloping"),
  standing(horizonLength, Vec4<int>(0,0,0,0),Vec4<int>(10,10,10,10),"Standing"),
  trotRunning(horizonLength, Vec4<int>(0,5,5,0),Vec4<int>(3,3,3,3),"Trot Running"),
  walking(horizonLength, Vec4<int>(0,3,5,8), Vec4<int>(5,5,5,5), "Walking"),
  walking2(horizonLength, Vec4<int>(0,5,5,0), Vec4<int>(7,7,7,7), "Walking2"),
  pacing(horizonLength, Vec4<int>(5,0,5,0),Vec4<int>(5,5,5,5),"Pacing")
{
  dtMPC = 0.001 * iterationsBetweenMPC;  //头文件中定义了
  setup_problem(dtMPC, horizonLength, 0.4, 120);   //设置参数
  rpy_comp[0] = 0;
  rpy_comp[1] = 0;
  rpy_comp[2] = 0;
  rpy_int[0] = 0;
  rpy_int[1] = 0;
  rpy_int[2] = 0;

  for(int i = 0; i < 4; i++)
    firstSwing[i] = true;   // 赋值 正确,布尔量来的
}

C++中public、protected及private用法

1.类的一个特征就是封装,public和private作用就是实现这一目的。所以:

用户代码(类外)可以访问public成员而不能访问private成员;private成员只能由类成员(类内)和友元访问。

2.类的另一个特征就是继承,protected的作用就是实现这一目的。所以:protected成员可以被派生类对象访问,不能被用户代码(类外)访问。

public, protected, private三种继承方式,它们相应地改变了基类成员的访问属性

public继承: 基类public成员,protected成员,private成员的访问属性在派生类中分别变成: public, protected, private (属性还是保持不变)

protected继承: 基类public成员,protected成员,private成员的访问属性在派生类中分别变成:protected, protected, private (公有变为保护变量)

private继承: 基类public成员,protected成员,private成员的访问属性在派生类中分别变成:private, private, private (全部变为私有属性的了)

但无论哪种继承方式,上面两点都没有改变:

private成员只能被本类成员(类内)和友元访问,不能被派生类访问;

protected成员可以被派生类访问。

继承类就是别继承类的派生类

条件运算符:

<表达式1>?<表达式2>:<表达式3> ;

含义是: 先求表达式1的值,如果为真,则执行表达式2,并返回道表达式2的结果 ; 如果表达式1的值为假,则执行表达式3 ,并返回表达式3的结果

fabs()和abs()区别

函数名: abs
功 能: 求整数的绝对值
用 法:

 int abs(int i);

返回的是|x|的值

函数名:fabs
功能:求浮点数x的绝对值
用法:

 float fabs(float j);
 double fabs(double j);

返回的是|x|的值

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

在C++中除了类中可以有构造函数和析构函数外,结构体中也可以包含构造函数和析构函数,这是因为结构体和类基本雷同,唯一区别是,类中成员变量默认为私有,而结构体中则为公有。注意,C++中的结构体是可以有析构函数和构造函数,而C则不允许。

类中成员函数声明后面接 const

const 表示对类中成员函数属性的声明;

表示不会修改类中的数据成员;

在编写const成员函数时,若不慎修改了数据成员,或者调用了其他非const成员函数,编译器将指出错误;

C++中函数定义前加virtual关键字的作用

加了Virtual关键字的函数就是虚拟函数,而=0的意思表示本类不对这个成员函数进行实现,即该成员函数没有函数体,这种函数叫纯虚函数。

class CShape
{
public:
    virtual void Show()=0;
};

虚指针,虚函数表等知识。。。。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++小结 析构函数、函数后面接冒号 等等 的相关文章

  • excel vba编程代码大全_实战VBA代码一键提取EXCEL中的所有公式!

    有的时候 xff0c 我们希望把表中的公式提取出来 xff0c 进行保存 xff01 少量 xff0c 我们可以手动复制 xff0c 量大 xff0c 猝 所以我们今天就分享一下如何一键提取 用什么 xff0c VBA上吧 xff01 还是
  • linux系统备份路径,linux系统备份恢复到本机或是别的机器上

    最近一直搞Xtion2 openni2 一下装完一个东西就不能用了 xff0c 由于ubuntu系统不熟 xff0c 找不到错误 xff0c 弄得每次都要重新装系统 xff0c 当我配了好几天的系统 xff0c 里面带着mxnet orbs
  • cmake之 ADD_LIBRARY()

    上一篇我分析了如何调用别人的第三方库 xff0c 现在我继续分析如何构建一个库供他人使用 完成这个任务需要用到ADD LIBRARY 强烈建议学习cmake的同学多多参考官方文档 xff0c 自己也是参考了一部分 1 xff1a ADD L
  • ESB企业服务总线

    ESB企业服务总线 提供位置透明性的消息路由和寻址服务提供服务注册和命名的管理功能支持多种消息传递范性支持多种可以广泛使用的传输协议支持多种数据格式及其相互转换提供日志和监控功能
  • 对Nginx的简单理解

    Nginx 同行是apache nginx同apache一样都是一种web服务器 xff0c 基于rest架构风格 xff0c 以统一资源描述符URI或者统一资源定位符URL作为沟通依据 xff0c 通过HTTP协议提供各种网络服务 apa
  • VSCode+clangd阅读linux内核源码

    1 clangd 原理介绍 clangd 插件用于代码语义分析 代码补全 跳转等 能做到代码精准跳转 精准自动补全 xff0c 其根本原理是通过读取工程编译自动生成的compile commands json 文件来索引其中包含的源文件和关
  • 旋转矩阵、欧拉角

    旋转矩阵 欧拉角 注 xff1a 下面为学习空间机器人技术系列课程笔记 xff0c 加上一些自己的整理 xff0c 方便复习 一 旋转矩阵的引出 下面坐标系0的基向量为 x 0 xff0c
  • Makefile的入门完整教程(包学包会)

    Makefile的完整入门教程 xff08 实现不了来打我TAT xff09 看完能够了解Makefile是什么 xff1b 我们能用makefile做什么 xff1b makefile的简易使用 1 什么是Makefile Makefil
  • ubuntu18.04 升级内核后,进入系统页面卡在“started gnome display manager“的解决方案

    问题描述 安装了18 04后 xff0c 系统的内核是5 0的 xff0c 不支持电脑的wifi xff0c 所以就想升级一下 升级到5 4后在grub界面选择5 4的内核后 xff0c 进入系统 xff0c 界面一直卡在started g
  • Ubuntu 14.04下,分辨率只有800×600的解决方法

    对于Ubuntu 14 04 xff0c 在安装好后 xff0c 默认的分辨率是800 600 xff0c 对于有着高分辨率例如1920 1080的显示器 xff0c 或者想要拓展双屏 xff0c 本身默认显示器驱动无法实现 xff0c 因
  • ubuntu14.04下安装cmake 3.5

    对于ros的应用 xff0c 很多还局限在indigo下 xff0c 因此要求的Ubuntu版本还限制在14 04 但对于很多新的功能包 是在kinetic下运行的 xff0c 很多cmake要求在3 5以上 xff0c 而安装ros in
  • Ubuntu16.04下使用ros_qtc_plugin在qt下进行编译

    系统测试环境 系统版本 Ubuntu16 04ROS版本 kinetic 按照官网的教程https ros qtc plugin readthedocs io en latest source Improve ROS Qt Creator
  • Ubuntu16.04下openpose编译及测试demo

    一 安装 官方安装流程见openpose官方 在安装前 xff0c 尽量保证有很好的显卡以及内存 xff0c 不然在运行demo的过程中会出现out of memory的情况出现 流程如下 xff1a 1 下载 git clone http
  • ubuntu16.04 通过anaconda建立虚拟环境,安装tensorflow1.10,cuda9.0,cudnn7.1.2

    1 anaconda建立虚拟环境及conda操作 env name代表你想要建立的环境名字 n表示名字 conda create n env name python 61 3 5 激活环境 source activate env name
  • 运维人员核心职责

    运维小知识点 xff01 网站数据不能丢网站7 24小时运转提升用户体验 xff0c 访问速度要快 云计算 1 公有云 2 私有云 就是自己内部的运维工程师部署的一个云平台 xff0c 资源管理平台数据都放在自己手中 xff0c 不被别人看
  • Ubuntu16.04下向github传送或修改代码

    初次使用Git设置 这段针对的是初次使用Git的设置 xff0c 如果初次设置之后 xff0c 就直接跳到下一阶段 将本地仓库push至github远程仓库 1 首先要确定Ubuntu下是否有git 终端运行指令 sudo apt inst
  • 字符串尾部得加'\0'原因

    39 0 39 一般放在字符串的结束处 xff0c 表示字符串的结束 xff0c 其是ascii值为0的字符的转义 在头文件 include lt string h gt 中包含的一些字符串处理函数等中 xff0c 一般处理字符串时 xff
  • cmake-CMakeLists.txt中添加目标编译选项的方法

    CMakeLists txt中添加目标编译选项的方法 原因 xff1a 如果程序中用到了宏来区分不同的方法 xff0c 但是又不想每次在用到不同的方法的时候都要在程序中更改宏定义后再进行编译 xff0c 那么可以在CMakeLists tx
  • GDB多线程调试和死锁

    set schedular locking on off 条件断点查看循环中的某些变量 break if命令 示例 xff1a break test c 34 if x amp y 61 61 1 默认情况下我们执行到断点处继续执行时 xf
  • Gazebo仿真踩坑系列-乱飞、抖动等

    本文章记录机械臂 塔吊等仿真过程中遇到的各种问题 塔吊建模 前言 gazebo机械臂等控制仿真最重要的是建模 xff0c 也就是URDF的编写 xff0c 而这里面有着特别多要注意的地方 xff0c 否则会发生 启动乱飞 控制乱飞 和 启动

随机推荐

  • Qt6新创建CMake项目启动不了

    错误如下 xff1a 1 error CMake was unable to find a build program corresponding to 34 Ninja 34 CMAKE MAKE PROGRAM is not set Y
  • Linux/Centos 安装oracle报错“调用makefile ‘/oracle/product/11.2.0/dbhome_1/sysman/lib/ins_emagent.mk的目标” 解决

    解决centos7 redhat7安装oracle11g到 70报错问题 Linux Centos 安装oracle报错 调用makefile 39 oracle product 11 2 0 dbhome 1 sysman lib ins
  • C++使用技巧(四):单双冒号“:”和“::”用法

    C 43 43 单冒号与双冒号的作用 1 冒号 xff08 xff09 用法 xff08 1 xff09 表示结构体内位域的定义 xff08 即该变量占几个bit空间 xff09 span class token keyword typed
  • 交换机与路由器

    交换机 VS 路由器 交换机 xff1a 把数据包发送到正确的位置 xff0c 相当于邮递员 xff0c 根据数据包中的目标mac地址 xff0c 找到他对应的物理端口 xff0c 一台交换机有很多个端口 xff0c 它们都有自己的编号 x
  • 在C++中使用openmp进行多线程编程

    声明 xff1a 本文是基于Joel Yliluoma写的Guid into OpenMP Easy multithreading programming for C 43 43 而写的 xff0c 基本是按照自己的理解 xff0c 用自己
  • CMakeLists 写法总结

    0 前言 之前简单介绍了makefile的写法 xff0c 但实际工程中基本不会手写makefile xff0c 通常情况是会写一个CMakeLists甚至是多层多个CMakeLists来构建整个工程 关于makefile和CMakeLis
  • C++成员函数后面跟冒号冒号

    冒号后面跟的是赋值 xff0c 这种写法是C 43 43 的特性 A int aa int bb a aa b bb 相当于 A int aa int bb a 61 aa b 61 bb
  • Apollo 算法阅读之Public Road轨迹规划算法--路径规划(含源代码)

    本次博文主要介绍apollo 5 0版本内使用的轨迹规划算法 public road xff0c 该算法的核心思想是PV解耦 xff0c 即Path Velocity的解耦 xff0c 其主要包含两个过程 xff1a 1 路径规划 xff0
  • 交互式多模型 IMM的原理

    交互式多模型简单原理 交互式多模型 IMM xff08 Interacting Multiple Model xff09 控制算法的主体思想是基于贝叶斯理论而提出的模型间的自动识别与切换 xff1a 在任意跟踪时刻 xff0c 通过设置对应
  • Apollo算法阅读之基于Sqp的Referenceline全局参考路线优化(含源码)

    算法来源于Apollo代码 代码源地址 xff0c 通过序列优化思想 xff0c 建立无人驾驶车辆参考路径的平滑 xff0c 利用泰勒展开将曲率约束线性化表达 xff0c 目标函数中利用弹性带思想 xff0c 并尽可能缩短参考路径长度且保持
  • 离散点间曲率计算

    本文转自知乎计算离散点的曲率 xff08 附Python MATLAB代码 xff09 在很多学科中的很多计算任务中都需要用到曲线的曲率 xff08 或者曲率半径 xff09 xff0c numpy库里和matlab build in里都没
  • 关于Frenet坐标系内曲率约束

    本文摘自于apollo直播公开课 xff0c 因为车辆存在最小的转弯半径 xff0c 所以我们要对车辆运动学进行限制 由于转弯半径是基于笛卡尔坐标系的 xff0c 需要基于Frenet坐标系进行转换 假设 xff1a xff0c 车辆朝向与
  • caffe内CHECK_EQ等函数意义解释

    个人在学习caffe源码文件时遇到了CHECK EQ函数 xff0c 不理解什么含义 xff0c 经过上下文理解 xff0c 明白了其中含义 CHECK EQ x y lt lt 34 x 61 y 34 xff0c EQ即equation
  • 电路交换方式与分组交换方式计算题

    已知网络速率为1Mb S xff0c 对于每个用户来说 xff0c 有10 的时间是活跃的 xff0c 活跃时网速为100kb s 对于电路交换方式来说 xff0c 最多只能支持10位用户接入网络 由于1Mb 61 1000kb xff0c
  • Carla编译make launch过程中出现UE4_ROOT is not defined

    在编译carla过程中出现如下情况 xff1a BuildCarlaUE4 sh ERROR UE4 ROOT is not defined or points to a non existant directory please set
  • request 模块可以帮助我们发起http请求

    request 模块可以帮助我们发起http请求 步骤 xff1a 1 首先import 下 request 模块 2 然后看请求的方式 xff0c 选择对应的请求方法 3 接受返回的报文信息 有requests get requests
  • 自动提取论文公式方法

    需要的软件 MathType 7 Mathpix Snipping Tool 软件获取链接 xff1a 链接 xff1a https pan baidu com s 1Fz VGkgZJbZhlocL4y1AoA 提取码 xff1a ci0
  • 现代 CMake 简明教程--CMake 基础

    前言 用 CMake 来构建 C C 43 43 项目是业内的主流做法 最近 xff0c 我们的项目代码做了一些拆分和合并 xff1a 引入其他仓库代码 xff0c 并且将公共部分拆分以供多个仓库同时使用 为此 xff0c 就得修改项目中的
  • USB接线定义和链接摄像头

    原文链接 xff1a https www cnblogs com chinalantian articles 2131361 html 写本文的意义在于了解USB的接线定义和实现使用手机数据线读取摄像头图像 USB接口定义 颜色 一般的排列
  • C++小结 析构函数、函数后面接冒号 等等

    讲在前面 本小结有析构函数 C 43 43 函数后面接 xff1a 的含义 C 43 43 中public protected及private用法 条件运算符 fabs 和abs 区别 C 43 43 中的结构体内的函数 类中成员函数声明后