C++基础4:构造函数、析构函数、拷贝析构函数、静态成员函数

2023-10-26

【构造函数】
1.1构造函数:一个特殊的函数与类型名相同,没有返回值类型,保证创建一个对象时,自动调用一次,一个类可以有多个构造函数
作用:初始化对象
如果一个类不提供构造函数,则系统自动提供一个无参构造函数,但一旦提供构造函数,则系统的无参构造自动消失。

1.2一个对象的创建过程
根据对象大小,分配内存,如果类的成员变量是基本类型,则什么都不做;如果是类类型的成员,则去构造它,调用这个类的构造函数

1.3初始化参数列表
当类型中有const成员,或者引用类型的成员,需要在构造函数调用之前赋值,在构造函数参数列表之后,实现体之前的位置是初始化参数列表
注:构造函数可以直接赋值:
class A{
    const int a;
    int b;
    int &c;
public:
    A(int oc):a(123),b(99),c(*new int(oc)){
        //a = 100;
        //b = 200;
        cout<<a<<","<<b<<","<<c<<endl;
    }
};
int main()
{
    A a(111);

 

}

 

 

【析构函数】
2.1析构函数:一个特殊的函数,和类名相同,但是函数名之前有一个~,不能有任何的参数,也没有返回值类型,在对象被销毁前自动调用一次

2.2什么时候需要自定义析构函数
对象销毁时,需要释放资源,一般是有动态内存分配时

2.3在构造函数中或者初始化参数列表中为指针类的成员变量分配了内存,在析构函数中释放掉动态分配的内存

2.4构造函数和析构函数的调用顺序:先构造后析构

 

【拷贝构造函数】
拷贝构造函数:是一个特殊的构造函数,是使用一个已经存在的对象,去创建另外一个同类型的对象
类名(const 类名& 新参名)
class A{
public:
A(){ ...
}
A(const A& a){
}
};

3.2拷贝构造函数调用的时机
使用同类型的对象,去创建另外一个对象
A a;
A b=a;


把一个对象赋值给函数的形参
showa(A a)

把一个对象作为函数的返回值
A geta(A a){
return a;
}

3.3什么时候需要自定义拷贝构造函数
希望自定义拷贝过程,需要让对象 有自己的独立空间,默认的拷贝构造函数 是把原对象的数据进行逐字节的拷贝

 

【静态成员函数】【静态成员变量】
4.1 静态成员函数是不需要对象就可以直接调用的成员函数
4.2 静态受类名作用域和权限的控制
4.3 静态成员函数只能访问静态成员,不能直接访问非静态成员
4.4 静态成员变量必须在类外进行初始化,如果静态成员是基本类型,则初始化为0,如果是自定义类型,则自动调用无参构造
class A{
static int a;
};
静态成员变量的类型  类名::变量名;

4.5 静态成员函数无this指针,普通成员函数中,编译器负责传入一个指针this,而静态函数不需要通过对象调用,也就没有传入this指针

 

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

C++基础4:构造函数、析构函数、拷贝析构函数、静态成员函数 的相关文章

  • C++ 拷贝构造函数和赋值运算符

    本文主要介绍了拷贝构造函数和赋值运算符的区别 以及在什么时候调用拷贝构造函数 什么情况下调用赋值运算符 最后 简单的分析了下深拷贝和浅拷贝的问题 拷贝构造函数和赋值运算符 在默认情况下 用户没有定义 但是也没有显式的删除 编译器会自动的隐式
  • C++_生成随机字符串

    include
  • 【C/C++】报错问题积累

    1 出现Deprecated declaration XXX give arg types c文件中 有没有参数的函数时 声明需要加void即 main c void fun main h void fun void
  • C/C++语言实现WiFi(socket)数据收发(客户端和服务端)

    目录 客户端 client 服务端 server C C 实现TCP通信 接收WIFI数据 编程环境 VC 6 0 手机端 使用WiFi调试助手 提示 整个过程在局域网中进行 很多编程语言都可以实现socket通信 本博客将通过C C 实现
  • C++中的namespace

    namespace中文意思是命名空间或者叫名字空间 传统的C 只有一个全局的namespace 但是由于现在的程序的规模越来越大 程序的分工越来越细 全局作用域变得越来越拥挤 每个人都可能使用相同的名字来实现不同的库 于是程序员在合并程序的
  • 调用拷贝构造函数的几种情况(附面试题)

    1 深拷贝和浅拷贝 拷贝构造函数的使用 有时候需要自己定义拷贝构造函数 以避免浅拷贝问题 在什么情况下需要用户自己定义拷贝构造函数 一般情况下 当类中成员有指针变量 类中有动态内存分配时常常需要用户自己定义拷贝构造函数 在什么情况下系统会调
  • C语言pcre库的使用及验证IP地址的合法性

    PCRE是一个用C语言编写的正则表达式函数库 它十分易用 同时功能也很强大 性能超过了POSIX正则表达式库和一些经典的正则表达式库 在使用PCRE库时 首先肯定是需要安装pcre的 不过一般的系统都会有自带的PCRE库 不过如果想使用最新
  • c/c++入门教程 - 1.基础c/c++ - 1.0 Visual Studio 2019安装环境搭建

    推荐视频课程 https www bilibili com video BV1et411b73Z p 2 已投币三连 b站果然是个学习的网站 本来是想在linux环境下运行QT 于是先学了几个月linux嵌入式驱动开发 后来发现太底层了 与
  • 互联网创业盈利模式指南

    看了很多创业的case 都有点下笔千言 离题万里的 情况 就是很多case都很精彩 但是公司 的价值最终是落实到 给创业者和投资人的回报的 因此 所有的case 最终都是 落实到盈利 模式上 一位投资人士说的很明确 中国的盈利模式很简单 就
  • 【C++】VS code如何配置使用C++(手把手教学)

    博 主 米码收割机 技 能 C Python语言 公众号 测试开发自动化 获取源码 商业合作 荣 誉 阿里云博客专家博主 51CTO技术博主 专 注 专注主流机器人 人工智能等相关领域的开发 测试技术 VS code如何配置使用C 手把手教
  • GDAL多光谱与全色图像融合简单使用

    目录 简述 C 代码 效果对比 GDAL融合效果和原始多光谱波段对比 GDAL融合效果和原始全色波段对比 ARCGIS融合效果与原始全色和多光谱对比 GDAL融合效果与ArcGIS融合效果对比 简述 最近在GDAL的代码中看见了gdalpa
  • 为何在新建STM工程中全局声明两个宏

    在uVision中新建STM32工程后 需要从STM32标准库中拷贝标准外设驱动到自己的工程目录中 此时需要在工程设置 gt C C 选项卡下的Define文本框中键入这两个全局宏定义 STM32F40 41xxx USE STDPERIP
  • 手把手教你如何写一个三子棋/N子棋的小游戏

    这里写目录标题 第一步 游戏进入界面 第二步 初始化棋盘 第三步 打印棋盘 第四步 玩家和电脑下棋 第五步 判断输赢 三子棋或者N子棋怎么写 让我们先来玩一把 再来看看怎么写 程序运行界面 1为玩游戏 2为清屏 0为退出游戏 我们选1 然后
  • 在聚会中常玩数七的游戏,七的倍数和带有七的数字都不能说,比如14,27,28。请找出1~100的不能说的数字。...

    利用ES5的filter高阶函数来实现 var arr 1 2 3 4 5 6 7 17 27 21 22 28 100 r arr filter function x return x 10 7 x 7 0 alert r 7 14 17
  • Public Private Protect Inheritance and access specifiers

    In the previous lessons on inheritance we ve been making all of our data members public in order to simplify the example
  • C 语言教程:数据类型和格式说明符

    C 语言中的数据类型 C 中的变量必须是指定的 数据类型 并且您必须在 printf 函数中使用 格式说明符 来显示它 创建变量 int myNum 5 整数 没有小数点 float myFloatNum 5 99 浮点数 char myL
  • C++中的并发多线程网络通讯

    C 中的并发多线程网络通讯 一 引言 C 作为一种高效且功能强大的编程语言 为开发者提供了多种工具来处理多线程和网络通信 多线程编程允许多个任务同时执行 而网络通信则是现代应用程序的基石 本文将深入探讨如何使用C 实现并发多线程网络通信 并
  • C/C++编程:令人印象深刻的高级技巧案例

    C C 编程语言在软件开发领域有着悠久的历史 由于其高效 灵活和底层访问能力 至今仍然被广泛应用 本文将介绍一些在C C 编程中令人印象深刻的高级技巧 帮助读者提升编程水平 更加高效地使用这两种强大的编程语言 一 指针运算与内存管理 C C
  • C++ 字符串比较------strcmp函数和strncmp函数

    strcmp 函数原型 int strcmp const char str1 const char str2 功能 strcmp函数会按照字典顺序逐个比较两个字符串的字符 直到遇到不同的字符或者遇到字符串结束符 0 返回值 该函数返回值如下
  • C++ 中 const 和 constexpr 关键字解析:常量、函数和指针

    很多 C 的初学者看到 const 这个关键字的第一反应都是一头雾水 主要是因为 const 可 以出现在很多的位置 以及后面加入的 constexpr 更是常常感到困惑 今天就为大家一一解释出现它们的含义和以及作用 const 关键字 c

随机推荐

  • [网络安全]sqli-labs Less-2 解题详析

    网络安全 Less 2 GET Error based Intiger based 基于错误的GET整型注入 判断注入类型 判断注入点个数 查库名 查表名 查users表的列名 查字段 注意 总结 往期回顾 网络安全 sqli labs L
  • TensorRT简介

    一 什么是TensorRT 一般的深度学习项目 训练时为了加快速度 会使用多 GPU 分布式训练 但在部署推理时 为了降低成本 往往使用单个 GPU 机器甚至嵌入式平台 比如 NVIDIA Jetson 进行部署 部署端也要有与训练时相同的
  • 【设计模式】工厂方法模式(C#)

    设计模式 工厂方法模式 1 概述 针对简单工厂中的缺点 使用工厂方法模式就可以完美的解决 完全遵循开闭原则 定义一个用于创建对象的接口 让子类决定实例化哪个产品类对象 工厂方法使一个产品类的实例化延迟到其工厂的子类 工厂方法模式的主要角色
  • 解决gensim fasttext官方案例报错TypeError: Either one of corpus_file or corpus_iterable value must be provide

    完整报错为 TypeError Either one of corpus file or corpus iterable value must be provided 解决方法 将官方案例中传递参数时指定的sentences 删除即可 比如
  • Recyclerview源码深入探索:Adapter的增删改再也不迷路

    作者 maxcion 看到标题说的是三级缓存 有的地方说是四级缓存 请你不要迷惑 到底是三还是四 这就像图片加载这个场景有人说是三级缓存有人说是二级缓存 说三级缓存是把通过网络请求图片这个环节也认为是一层缓存 你认为这个环节应该不应该属于缓
  • 基于Qt、C++的毕业设计课设数学绘图工具(平面图、图表、立体图绘制-附下载链接)

    基于Qt C 的毕业设计课设数学绘图工具 平面图 图表 立体图绘制 介绍 这是我的毕业设计 基于Qt Creator 4 11 1 c 语言 效果图如下 点我下载项目源码 含打包软件 使用说明 1 二维函数绘制 开始界面 函数设置 输入界面
  • MySQL免安装配置教程(win10)

    一 下载安装包 1 1 下载zip包 打开官网地址下载zip安装包 这里下载的版本是5 7 可自行选择 对应下载网址 https downloads mysql com archives community 根据自己电脑进行选择对应安装包
  • 周志华《机器学习》笔记(第4章) 决策树

    第四章 决策树 1 总述 决策树基于树结构进行决策 叶结点对应于决策结果 其他每个结点对应于一个属性测试 每个结点包含的样本集合根据属性测试的结果被划分到子结点中 最终目的是产生一个泛化能力强 能够处理未知样本的决策树 基本流程遵循简单而直
  • XSS学习

    目录 什么是XSS 概念 理解 XSS分类 存储型XSS 反射型XSS 原理 攻击过程 DOM型 攻击过程 DOM行XSS与反射型XSS区别 存储型XSS与反射型XSS区别 DVWA实验 反射型XSS low等级 JavaScript弹窗函
  • 2013年第四届C/C++ A组蓝桥杯省赛真题解析

    目录 第一题 高斯日记 题目描述 思路分析 AC代码 第二题 排它平方数 题目描述 思路分析 AC代码 第三题 振兴中华 题目描述 思路分析 AC代码 第四题 颠倒的价牌 题目描述 思路分析 AC代码 第五题 前缀判断 题目描述 思路分析
  • 将文件从本机上传到虚拟机中Linux系统中的几种方法

    一 使用FileZilla上传文件 1 启动虚拟机 打开Linux终端 输入ifconfig命令查看IP地址 IP地址为192 168 59 6 2 打开FileZilla 输入IP地址 用户名 密码 端口号 点击快速连接 连接成功后 左边
  • 测试工程师(初&中)面试题+知识点

    说明 记录下个人开始转行自学 gt 开始求职期间主要的学习内容 涵盖了 计算机基础 测试基础 自动化测试等 初中级测试 20年夏更新 需要掌握的大部分内容 巩固基础与按知识点自查时可选择性参考 一 面试题 1 请分别介绍一下单元测试 集成测
  • 芯片的SD/MMC控制器以及SD卡介绍

    1 MMC SD卡 eMMC介绍 1 1 三者关联 1 最早出现的是MMC卡 卡片式结构 按照MMC协议设计 相较于NandFlash芯片来说 MMC卡有2个优势 第一是卡片化 便于拆装 第二是统一了协议接口 兼容性好 2 后来出现SD卡
  • 数据库---mysql 之 常用命令行命令

    1 展示当前所有的数据库 show databases mysql gt show databases Database information schema jzq test mtx 1 mysql performance schema
  • 使用特网云云主机的最显着原因之一

    云计算的快速发展主要是由于移动设备的数量不断增加 云不仅对企业有用 对普通人也有用 我们无需在 PC 上安装程序即可运行程序 通过 Internet 存储和访问内容 无需物理服务器即可开发和测试程序 等等 云计算本质上是我们解决当今企业面临
  • 序列化的简介

    序列化 序列化的介绍 1 1 定义 序列化是将对象状态转换为可保持或传输的格式的过程 与序列化相对的是反序列化 它将流转换为对 象 这两个过程结合起来 可以轻松地存储和传输数据 1 2 序列化的目的 通过序列化以字节流的形式使对象在网络中进
  • 为什么别选计算机专业?

    在知乎看到一个这样的问题 为什么别选计算机专业 这个话题有 800 万人次浏览 以下是一位匿名用户的高赞回答 内容可能比较主观化 仅代表原作者个人观点 如果有不同意见欢迎留言区交流啊 不明白现在鼓吹计算机是什么意思 985计算机毕业 刷Le
  • 广东海洋大学数学与计算机学院校友会,2020年广东海洋大学数学与计算机学院全日制硕士研究生入学考试复试及录取工作方案...

    为规范我校全日制硕士研究生复试工作 保障研究生入学质量 依据教育部有关文件及广东省研究生招生录取工作会议精神 结合学校今年硕士研究生招生工作的实际情况 特制定本工作方案 一 工作原则 研究生复试工作要坚持公开 公平 公正和科学选拔的原则 德
  • 【C++】继承详解

    文章目录 继承的概念 基类和派生类对象赋值转换 继承作用域 派生类的默认成员函数 继承和友元 静态成员变量的继承 菱形继承和虚拟继承 继承和组合 继承的概念 继承机制是面向对象程序设计使代码复用的重要手段 通过继承机制 可以利用已有的数据类
  • C++基础4:构造函数、析构函数、拷贝析构函数、静态成员函数

    构造函数 1 1构造函数 一个特殊的函数与类型名相同 没有返回值类型 保证创建一个对象时 自动调用一次 一个类可以有多个构造函数 作用 初始化对象 如果一个类不提供构造函数 则系统自动提供一个无参构造函数 但一旦提供构造函数 则系统的无参构