浅谈C嘎嘎类与对象

news2024/9/24 1:20:18

本篇文章与大家浅谈一下C嘎嘎的类与对象知识点

类的定义

关键字:class

语法格式:

class  类名

{

};//这里的分号不能少

此外,class有三个属性分别是private、public、protected,这三个属性是干啥的,相信大家通过这三个单词的中文意思应该也能知道。那么我们来看一下下面的这个例子。

从上面的图片中,我们可以看到整个类分为了两个部分:公共部分和私有部分,私有部分中声明变量,公有部分定义函数以及构造函数等等

构造函数

特点

1. 函数名与类名相同。
2. ⽆返回值。
3. 对象实例化时系统会⾃动调⽤对应的构造函数。
4. 构造函数可以重载。
5. 如果类中没有显式定义构造函数,则C++编译器会⾃动⽣成⼀个⽆参的默认构造函数,⼀旦⽤⼾显式定义编译器将不再⽣成。
6. ⽆参构造函数、全缺省构造函数、我们不写构造时编译器 默认⽣成的构造函数 ,都叫做默认构造函数。

无参构造函数

类名()

{
    变量 = 初始值;

}

有参构造函数

类名(类型  变量)

{
     (类中私有化的变量) 变量 = 变量(类名括号内的变量);

}

全缺省有参构造函数

类名(类型 变量 = 初始值)

{
   (类中私有化的变量) 变量 = 变量(类名括号内的变量);

}

析构函数

1. 析构函数名是在类名前加上字符~。eg.~stack()

2.  ⽆参数⽆返回值。(这⾥跟构造类似,也不需要加void)

3. ⼀个类只能有⼀个析构函数。若未显式定义,系统会⾃动⽣成默认的析构函数。

4. 对象⽣命周期结束时,系统会⾃动调⽤析构函数。

5. 跟构造函数类似,我们不写编译器⾃动⽣成的析构函数对内置类型成员不做处理,⾃定类型成员会 调⽤他的析构函数。 

拷贝构造函数

1. 拷⻉构造函数是构造函数的⼀个重载。
2. 拷⻉构造函数的参数只有⼀个且必须是类类型对象的引⽤,使⽤传值⽅式编译器直接报错,因为语法逻辑上会引发⽆穷递归调⽤。
3. C++规定⾃定义类型对象进⾏拷⻉⾏为必须调⽤拷⻉构造,所以这⾥⾃定义类型传值传参和传值返回都会调⽤拷⻉构造完成。
4. 若未显式定义拷⻉构造,编译器会⽣成⾃动⽣成拷⻉构造函数。
举个例子:
Date  (const  Date&  d)
{
      _year = d. year;
//类中的变量   对象中的变量
}
拷贝构造的形式:

运算符重载

1. 概念:当运算符被⽤于类类型的对象时,C++语⾔允许我们通过运算符重载的形式指定新的含义。

2. 形式:运算符重载是具有特殊名字的函数,即operator和运算符共同构成,见第6点
3. 参数个数:重载运算符函数的参数个数和该运算符作⽤的运算对象数量⼀样多。
4. 隐含条件 :如果一个重载运算符函数是成员函数,则它的第一个运算对象默认传给隐式的this指针,因此运算符重载作为成员函数时,参数比运算对象少一个
5. 不能重载的运算符: .*      、    ::      、 sizeof     、   ?:   、    .
6. 重载操作符至少有一个类类型参数,不能通过运算符重载改变内置类型对象的含义    
eg. operator + (int x, int y)

赋值运算符

赋值运算符重载是一个默认成员函数,用于完成两个已经存在的对象直接拷贝的赋值

拷贝构造用于一个对象拷贝初始化给另一个创建的对象类名

形式: 对象名(前对象名);或   类名   对象名  = 前对象名

拷贝赋值构造语法格式:

类名  operator = (const Date& 别名)

{

       变量名 = 对象名.成员变量名;

          return *this

}

类名&  operator = (const Date& 别名)

{

       变量名 = 对象名.成员变量名;

          return *this

}

特点
1. 赋值运算重载的参数建议写成const 当前类类型引⽤,否则会传值传参会有拷⻉
2.  有返回值,且建议写成当前类类型引⽤,引⽤返回可以提⾼效率,有返回值⽬的是为了⽀持连续赋 值场景。
3.  没有显式实现时,编译器会⾃动⽣成⼀个默认赋值运算符重载,默认赋值运算符重载⾏为跟默认拷贝构 造函数类似,对内置类型成员变量会完成值拷⻉/浅拷⻉(⼀个字节⼀个字节的拷⻉),对⾃定义类型 成员变量会调⽤他的赋值重载。

隐形的指针——this指针

this指针隐藏的位置

1. 类的成员函数默认都会在形参第⼀个位置,增加⼀个当前类类型的指针

2. 类的成员函数中访问成员变量,本质都是通过this指针访问的

3. C++规定不能在实参和形参的位置显⽰的写this指针(编译时编译器会处理),但是可以在函数体内显⽰使⽤this指针。

4. 被const修饰的成员函数

取地址运算符重载

const修饰成员函数

const作用:和c语言指针时的const作用一样,都是用于缩小权限,注意这里使用了const后权限只有缩小不存在放大

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1932295.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

昇思25天学习打卡营第13天|CycleGAN 图像风格迁移互换全流程解析

目录 数据集下载和加载 可视化 构建生成器 构建判别器 优化器和损失函数 前向计算 计算梯度和反向传播 模型训练 模型推理 数据集下载和加载 使用 download 接口下载数据集,并将下载后的数据集自动解压到当前目录下。数据下载之前需要使用 pip install dow…

如何PR到别人仓库(指定分支,无废话)

如何PR到别人仓库(指定分支) 记录一下,之前都是直接master分支,现在记录如何pr到别人仓库的其他分支 首先进入别人仓库然后点击fork到自己仓库 步骤(以博主自己一个例子为例) (1)…

配置和保护SSH

使用SSH访问远程命令行 描述Secure Shell SSH(Secure Shell) 是一种网络协议,用于在不安全的网络上安全地进行系统管理和数据传输。它最初由 Tatu Ylnen 于1995年设计,并成为保护网络服务免受攻击的标准。SSH提供了多种功能&…

prometheus+grafana应用监控配置

配置Prometheus 官方地址:Download | Prometheus (wegt下载压缩包,解压并重命名prometheus,文件放于/data/prometheus即可) 配置 service方法(文件放于 /etc/systemd/system/prometheus.service): [Unit…

Windows与Ubuntu安装ffmpeg

文章目录 前言ffmpeg的简介安装ffmpegWindows下载设置环境变量 Ubuntu 总结 前言 FFmpeg是一款非常强大的开源音视频处理工具,它包含了众多的音视频编解码库,可以用于音视频的采集、编解码、转码、流化、过滤和播放等复杂的处理。在Windows系统上安装FF…

Talk|清华大学袁天远:PreSight - 利用NeRF先验帮助自动驾驶场景在线感知

本期为TechBeat人工智能社区第605期线上Talk。 北京时间7月3日(周三)20:00,清华大学博士生—袁天远的Talk已经准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “PreSight - 利用NeRF先验帮助自动驾驶场景在线感知”,他向大家介绍了新…

OBD诊断(ISO15031) 08服务

文章目录 功能简介ISO 9141-2、ISO 14230-4和SAE J1850的诊断服务定义1、请求控制车载设备请求消息(读取支持的TID)2、请求控制车载设备响应消息(报告支持的TID)3、请求控制车载设备请求消息(读取TID值)4、…

QTableView仿Excel表头排序和筛选

一.效果 Excel的排序和筛选弹窗如下所示 功能非常强大。不仅支持内容排序和筛选,还支持颜色的排序和筛选,而且还支持设置多种过滤条件。本文只仿最常用的内容排序和内容单过滤条件的筛选,效果如下所示。 从效果图中可以看出,表头Section中的按钮有下列六种状态 enum Butt…

自制OJ在线判题网站

项目效果啊演示: 项目链接: Gitee:Oj: 自定义实现的OJ在线做题网站,自主实现代码沙箱 (gitee.com) GitHub:GitHub - SakanaYdy/Oj 仓库中含有完整的项目流程PDF文档,可以参考自定义OJ网站。 目前只支持Java语言,可以…

【zabbix6监控java-tomcat全流程】

目录 一、监控主机安装zabbix-server1、zabbix的安装2、配置数据库3、为zabbix server配置数据库4、启动服务,web界面安装 二、被监控主机安装tomcat1、安装JDK2、安装tomcat 三、zabbix的服务端安装zabbix-java-gateway四、被监控主机tomcat的配置五、web界面添加主机 一、监控…

动态规划题目:单词拆分/三角形最小路径和 - leetcode

动态规划思想 / 步骤 : 先将 当前要求 总结成一个 精炼的 小问题 , 然后 将 求解题目 转换为 求解N个 小问题 , 每个小问题的 求解过程相同 ,但是 过程涉及 的 数据 是不同的 , 例如第三个 小问…

windows qt编译报错 无法打开包括文件: “EGL/egl.h”: No such file or directory

windows mingw32 qt creator QtAV 推荐ffmpeg依赖包 QT5.14.2 如果出现:无法打开包括文件: “EGL/egl.h”: No such file or directory 可能是Qt6的问题.在QT5上安装。 编译步骤: git clone https://github.com/wang-bin/QtAV.git cd QtAV &&…

ABAQUS应用10-Abaqus/Standard求解器定义接触时的有限滑移和小滑移

[toc] 0、背景 之前在做混塔参数化建模的过程中,Part之间的接触设置问题困扰过我很久。有一个老哥手动操作一遍以后发现需要定义小滑移接触。今天正好看见曹老师公众号讲解了这部分的设置,为防止丢失,收录在这里。同时欢迎大家关注曹老师公…

【Git学习 | 第2篇】在IDEA中使用Git

文章目录 在IDEA中使用Git1. IDEA中配置Git2. 获取Git仓库2.1 本地初始化仓库2.2 从远程仓库克隆 3. 本地仓库操作4. 远程仓库操作5. 分支操作 在IDEA中使用Git 1. IDEA中配置Git IDEA中使用Git,本质上使用的本地安装的Git软件配置步骤: 2. 获取Git仓库…

【Python与GUI开发】事件处理与打包分发

文章目录 前言 一、高级事件处理 1.自定义事件 2.拖放操作 3.复杂控件的事件处理 二、打包和分发 Tkinter 应用 1.PyInstaller 2.cx_Freeze 3.spec 文件 4.分发注意事项 三、实战示例:文件浏览器 总结 前言 在前面的讨论中,我们深入理解了 T…

Pikachu SQL注入训练实例

1 数字类型注入 打开Burp Suit工具,选择Proxy,之后点击Open Browser打开浏览器,在浏览器中输入http://localhost:8080/pikachu-master打开Pikachu漏洞练习平台。 选择“数字型注入”,之后点击下拉框随便选择一个ID,…

linux进程——父子进程层面的PID,fork的原理与理解

前言:本篇内容主要讲解进程中系统调用fork和父子进程的概念与原理, 想要系统学习linux进程的友友们只管看本篇文章是不行的。 还要学习一些linux进程的周边知识以及linux进程其他方面的知识,博主的linux专栏中已经加入了这些文章方便友友们进…

【Java数据结构】初始线性表之一:链表

为什么要有链表 上一节我们描述了顺序表:【Java数据结构】初识线性表之一:顺序表-CSDN博客 并且进行了简单模拟实现。通过源码知道,ArrayList底层使用数组来存储元素。 由于其底层是一段连续空间,当在ArrayList任意位置插入或者…

GESP CCF C++ 七级认证真题 2024年6月

第 1 题 下列C代码的输出结果是&#xff08; &#xff09;。 #include <iostream> #include <cmath> using namespace std; int main() { cout << sin(3.1415926 / 2); return 0; } A. 0 B. 1 C.0.5 D.0.7071 第 2 题 对于如下图的二叉树&#x…

「C++」类和对象(1)

欢迎来到海盗猫鸥的博客~~ 本篇我们将学习部分C中的类和对象相关知识沃~ (• ω •)&#xff89;算我一个&#xff5e; 目录 类的定义 类的定义及使用 访问限定符 类域 实例化 实例化概念&#xff1a; 对象大小&#xff1a; 内存对齐规则&#xff1a; 注意点&#xff…