C++开发过程笔记~~持续更新~~

2023-10-26

文章目录

1.为什么只有~析构函数不论基类和派生类都用到了virtual关键字?

C++中基类采用virtual虚析构函数主要目的是为了防止潜在的内存泄漏。
具体地说,如果派生类中申请了内存空间,并在其析构函数中对这些内存空间进行释放。假设基类中采用的是非虚析构函数,当删除基类指针指向的派生类对象时就不会触发动态绑定,因而只会调用基类的析构函数,而不会调用派生类的析构函数。那么在这种情况下,派生类中申请的空间就得不到释放从而产生内存泄漏。所以,为了防止这种情况的发生,C++中基类的析构函数应采用virtual虚析构函数。

关于虚函数的笔记看第12点。

2.c++ inline使函数实现可以在头文件中,避免多重定义错误

inline最大的用处是: 非template 函数,成员或非成员 ,把定义放在头文件中,定义前不加inline ,如果头文件被多个translation unit(cpp文件)引用,ODR会报错multiple definition。

相关链接

3.this->

this 是 C++ 中的一个关键字,也是一个 const指针,它指向当前对象,通过它可以访问当前对象的所有成员。this 是一个指针,要用 ->来访问成员变量或成员函数。

4.调用另一个cpp文件中函数(多个.cpp文件编译)

首先两个cpp文件都导入需要的函数声明所在的.h文件。

第一种方法是分别将两个cpp文件编译为.o文件,然后进行连接。

g++ -c main.cpp -o main.o
g++ -c fun.cpp -o fun.o
g++ main.o fun.o -o out

第二种方法是使用vscode编译器,在tasks.json中加入需要一起编译的文件
请添加图片描述

5.有空看看开源项目glog(谷歌日志系统)

6.类访问控制关键字public、protected、private的区别

1)private,public,protected的访问范围:

private: 只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问.
protected: 可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问
public: 可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问
注:友元函数包括两种:设为友元的全局函数,设为友元类中的成员函数

在不加声明时,类的成员默认为private成员。

  • 继承控制:
类自己 类的实例化对象 类的派生类
public成员 yes yes yes
protect成员 yes no yes
private成员 yes no no

2)类的继承后方法属性变化:

使用private继承,父类的所有方法在子类中变为private;
使用protected继承,父类的protected和public方法在子类中变为protected,private方法不变;
使用public继承,父类中的方法属性不发生改变;

public:可以被任意实体访问

protected:只允许子类及本类的成员函数访问

private:只允许本类的成员函数访问

在不加声明时,类的默认继承方式为private继承。

  • 继承控制:
public继承 protect继承 private继承
父类的public成员 public protect private
父类的protected成员 protect protect private
父类的private成员 不可见 不可见 不可见

7.类的参数

使用类的时候进行实例,如果有参数会将参数传入类中定义的构造函数里,可以给成员变量赋值。

8.模板template

模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。

使用模板的目的就是能够让程序员编写与类型无关的代码。比如编写了一个交换两个整型int 类型的swap函数,这个函数就只能实现int 型,对 double ,字符这些类型无法实现,要实现这些类型的交换就要重新编写另一个swap函数。使用模板的目的就是要让这程序的实现与类型无关,比如一个swap模板函数,即可以实现int 型,又可以实现double型的交换。模板可以应用于函数和类。

注意:模板的声明或定义只能在全局,命名空间或类范围内进行。即不能在局部范围,函数内进行,比如不能在main函数中声明或定义一个模板。

9.冒号:的作用

9.1 单冒号(

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

C++开发过程笔记~~持续更新~~ 的相关文章

随机推荐

  • 【第3篇】GooLeNet——Inception结构的开创者

    文章目录 摘要 1 引言 2 近期工作 3 动机和高层思考 4 架构细节 5 GoogLeNet 6 训练方法 7 ILSVRC 2014分类挑战赛设置和结果 8 ILSVRC 2014检测挑战赛设置和结果 9 总结 摘要 我们在Image
  • 5.Linux删除文件和目录

    在 Linux 中 可以使用 rm 命令来删除文件和目录 文件夹 下面是一些常见的删除操作及其示例 删除单个文件 使用 rm 命令加上要删除的文件名称即可 rm filename 删除名为 filename 的文件 删除多个文件 可以同时删
  • Maven中DependencyManagement和Dependencies区别

    Maven使用DependencyManagement元素来管理依赖版本号 通常会在一个组织或者项目的最顶层的父POM中看到DependencyManagement元素 使用pom xml文件中的DependencyManagement元素
  • python向列表添加元素的三种方法append()、extend() 和 insert()

    向列表增加元素的三种方法 只能处理list 1 append append 方法是将参数作为一个元素增加到列表的末尾 只接受一个参数 参数可以是任何数据类型 被追加的元素在List中保持着原结构类型 a 1 2 3 a append 4 b
  • c++ 读写标记

    r 打开只读文件 该文件必须存在 r 打开可读写的文件 该文件必须存在 rb 读写打开一个二进制文件 只允许读写数据 rt 读写打开一个文本文件 允许读和写 w 打开只写文件 若文件存在则文件长度清为0 即该文件内容会消失 若文件不存在则建
  • 车辆信息检测数据集收集汇总

    车辆信息检测数据集收集汇总 1 UA DETRAC 2 车牌数据集 3 自动驾驶数据集 4 车辆类型数据集 5 综合汽车 CompCars 数据集 6 汽车数据集 检测用 7 OpenData V11 0 车辆重识别数据集 VRID 8 S
  • 全国市场监管公共服务平台返回体相关加密

    链接 aHR0cDovL2p6c2MubW9odXJkLmdvdi5jbi9kYXRhL2NvbXBhbnk 抓包 95780ba0943730051dccb5fe3918f9fe1b6f2130681f99d5620c5497aa480f
  • Maven工程控制台输出中文乱码

    在pom xml的properties标签下加入如下元素即可解决
  • kubectl 插件推荐: kubectl-watch

    作者 imuxin 灵雀云后端工程师 kubectl watch 一个可以监听 kubernetes 资源的变更信息的 kubectl 插件 其中变更的内容通过使用 delta 1 或 difftastic 2 工具提供漂亮的终端界面展示
  • Python的函数、模块、包和库

    本文比较了Python中容易混淆的几个概念 分清它们之间的包含关系 即 函数 lt 模块 lt 包 lt 库 1 函数 function 理解为数学上的函数即可 下载安装完python后 并不是所有的函数都能直接使用的 不在同一文件时需要使
  • 快速开始 PieCloudDB Database:管控平台权限系统

    1 前言 在 快速开始 PieCloudDB 中 我们了解了如何在 PieCloudDB Database 创建账号 进行数据上传 查询和邀请用户 本文承接 快速开始 PieCloudDB 将对管控平台如权限管理 外部接入等进阶操作通过实例
  • el-dropdown-menu指令事件的使用方法

    el dropdown menu Dropdown 下拉菜单 中command指令事件的使用 官网的使用方法 点击菜单项后会触发事件 用户可以通过相应的菜单项 key 进行不同的操作 Dropdown 下拉菜单 Element Plus g
  • 5、若依服务监控

    文章目录 一 基本介绍 二 如何使用 1 添加依赖 2 在 application yml 配置暴露所有监控端点 3 监控启动类 4 启动后访问 http localhost 9100 actuator 返回正确数据表示测试通过 三 端点分
  • vue给标签动态添加元素_动态添加dom元素,并绑定vue事件

    背景 后管系统配置一个产品后 前端 vue js框架 取到这些产品信息并展示出来 产品经理要求在文本内容中添加链接 例如 本保险不承保前往处于战争状态或已被宣布为紧急状态的国家或地区 最新信息以登陆http baoxian pingan c
  • 随手记3:C#Unity中随机数的使用

    问题 在同时引用UnityEngine和System命名空间时 using UnityEngine 继承MonoBehaviour类 using System 用到了浮点数转字符串的Convert函数 如果直接Random Range fl
  • 安装mysql

    wget http repo mysql com mysgl community release el7 5 noarch rpm rpm ivh mysgl community release el7 5 noarch rpm yum y
  • JDBC简介(2)

    前篇 JDBC简介 1 1 Connection角色 Connection表示与特定数据库的连接 可以获取到数据库的一些信息 这些信息包括 其表信息 应该支持的SQL语法 数据库内有什么存储过程 此链接功能的信息等等 在一般实际使用情况下
  • Srpingboot项目application.yml文件没有生效

    1 首先看文件头是不是树叶 如果是不是 文件名称可能存在问题 我的问题 因为有父工程 去掉子工程里面的
  • 第11章 分布式事务解决方案

    mini商城第11章 分布式事务解决方案 一 课题 分布式事务解决方案 二 回顾 1 MongoDB部署及应用 2 购物车功能实现 3 订单功能实现 三 目标 1 分布式事务 事务简介 本地事务讲解 不同场景下的分布式事务 2 分布式事务理
  • C++开发过程笔记~~持续更新~~

    文章目录 1 为什么只有 析构函数不论基类和派生类都用到了virtual关键字 2 c inline使函数实现可以在头文件中 避免多重定义错误 3 this gt 4 调用另一个cpp文件中函数 多个 cpp文件编译 5 有空看看开源项目g