c++类知识点复习与总结
类
c++ 是一种人机交互的面向对象的编程语言,面向对象思想主要体现在 类 上。
类是具有相同属性和相同行为的对象的集合, 具有封装,继承,多态的特性。
类的定义
class 类名 { };
封装
例如:人就是一种类,相同属性有年龄,性别等。相同行为有吃饭,喝水等。
把这些相同属性和相同行为封装到一个结构中就类。
class people{
public:
int age;
char sex;public:
void eat();
void drink();
};
同样,动物也是一种类,相同属性也有年龄,性别等。相同行为也有吃饭,喝水等。
class animal{
public:
int age;
char sex;public:
void eat();
void drink();
};
继承
这时,发现人和动物的相同属性和行为可以再提取封装成一种类。
class object {
public:
int age;
char sex;public:
void eat();
void drink();
};
有了 object 类,再定义人和动物的类的时候,可以继承object 类。
class people:pulic object {
};
class animal :pulic object {
};
类 people 和 类 animal 中没有定义属性(年龄,性别)和 行为(吃饭,喝水),但是继承类object ,所以类 people 和 类 animal同样有了属性(年龄,性别)和 行为(吃饭,喝水)。
这只是一层继承,如果把类 people 和 类 animal继续往下区分,还可以多层继承。
class object 是基类,类 people 和 类 animal是子类也叫派生类。
多态
class animal :pulic object {
public:
void call ();//动物叫声
};class dog:animal {
public:
void call ();//狗叫声:汪汪
};class cat:animal {
public:
void call ()//猫叫声:喵喵
};
动物有叫声,不同的动物有不同叫声,这就是多态。
到此为止,我们对类的框架有了一个大体的认识,接下来是到类的内部。
类的属性和行为
类内部知识点:权限,构造函数,析构函数,内联函数,友元函数等等
访问权限
三种权限:私有权限 private,保护权限 protected, 公有权限 public (如果没有标注权限,默认是私有权限private)
权限范围:public > protected > private
权限可以作用于 属性和行为,还有派生类(继承权限)。
私有权限:将类属性和行为作为的私有成员,不能在类外访问;
保护权限:将类属性和行为作为的保护成员,不能在类外访问但是可以被继承;
公有权限:将类属性和行为作为的公有成员,可以在类外访问。
私有继承:将基类保护和公有的成员作为派生类的私有成员,不能在类外访问;
保护继承:将基类保护和公有的成员作为派生类的保护成员,不能在类外访问但是可以被继承;
公有继承:将基类保护和公有的成员作为派生类的公有成员,可以在类外访问。
构造函数
构造函数有 默认构造函数,拷贝构造函数,移动构造函数
构造函数没有返回值,如果类中没有定义的构造函数,默认有 默认构造函数。
class object {
public:
int age;
char sex;public:
object(int age,char sex);//构造函数 声明
object(object & obj);//拷贝构造函数 声明
object(object && obj) noexcept; //移动构造函数 声明~object();//析构函数 声明
};object::object(int a,char s){ //构造函数 定义
age =a ;
sex =s ;
}object::object(object & obj){ //构造函数 定义
age =obj.age ;
sex =obj.sex;
}object::object(object && obj) noexcept{ //移动构造函数 定义}~object() { //析构函数 定义
}
构造函数可以对成员变量进行初始化, 可以在函数体内进行,也可以用初始化列表。
object :: object(int a,char s) :age(a), sex(s) { //构造函数 定义}
拷贝构造函数:深拷贝和浅拷贝(只是对指针的拷贝,浅拷贝后两个指针指向同一个内存空间,深拷贝不但对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针是指向两个不同地址的指针。)
object :: object(object & obj){ //拷贝构造函数 定义
age =obj.age ;
sex =obj.sex ;
}
拷贝构造函数使用场景:
1.用一个对象初始化另一个对象;
2.函数参数是类对象(即值传递。引用传递除外);
3.函数返回值是类对象。
移动构造函数
原型:类名(类类型 &&); 以object类为例,其移动构造函数声明如下:
object ( object && obj ) noexcept;
使用场景:
用一个临时对象(即将被销毁的对象)去初始化另一个同类型的对象。
主要是针对类中有指针变量的情况(类似浅拷贝,临时对象的指针变量置空NULL)。
析构函数
原型:~类名(); 以object类为例,其析构函数声明如下:
~object(){
}
类中含有指针变量,需要在析构函数中处理,以防内存泄漏。
内联函数
1.在类中定义的成员函数,默认就是内联函数。
2.在类中声明的成员函数 前加上关键字 inline,类外定义的成员函数前 也加上inline,该成员函数是内联函数。
内联函数作用:减少了调用函数的步骤,而是直接替换。
友元函数
1.在类中声明的函数前加上关键字 firend. 不是类的成员函数。
以object类为例,其声明如下:
firend void show();// 类中声明
void show(){ // 类外定义
}
友元函数的作用:可以访问类的私有成员和保护成员。
同样,类中也可以有友元类,作用同友元函数一样。
虚函数
1.在类中声明的函数前加上关键字 virtual
以object类为例,其声明如下:
virtual void call();// 声明
虚函数作用:通过基类指针指向不同的派生类对象,也就是动态绑定,实现多态特性。
纯虚函数
1.在类中声明的函数前加上关键字 virtual,直接=0;没有函数体。
以object类为例,其声明如下:
virtual void call() = 0;
类中含有纯虚函数,该类是抽象类,不能实例化。
在其派生类中必须对该函数重定义,否则该派生类也成了 抽象类。
相关文章:
c++类知识点复习与总结
类 c 是一种人机交互的面向对象的编程语言,面向对象思想主要体现在 类 上。 类是具有相同属性和相同行为的对象的集合, 具有封装,继承,多态的特性。 类的定义 class 类名 { }; 封装 例如:人就是一种类…...
C++的allactor
https://zhuanlan.zhihu.com/p/693267319 1 双层内存配置器 SGI设计了两层的配置器,也就是第一级配置器和第二级配置器。同时为了自由选择,STL又规定了 __USE_MALLOC 宏,如果它存在则直接调用第一级配置器,不然则直接调用第二级配…...
【2025深度学习环境搭建-2】pytorch+Docker+VS Code+DevContainer搭建本地深度学习环境
上一篇文章:【2025深度学习环境搭建-1】在Win11上用WSL2和Docker解锁GPU加速 先启动Docker!对文件内容有疑问,就去问AI 一、用Docker拉取pytorch镜像,启动容器,测试GPU docker pull pytorch/pytorch:2.5.0-cuda12.4…...
在CentOS 7上安装和使用Spleeter音频分离工具的详细步骤
在音频处理领域,Spleeter是一款优秀的开源工具,能够帮助用户轻松实现音频文件中人声和背景音的分离。本文将详细介绍在CentOS 7系统上安装和配置Spleeter的步骤,以及如何使用Spleeter进行音频分离。 准备环境: 在开始安装Spleeter之前&…...
【1】VS Code 新建上位机项目---C#基础语法
VS Code 新建上位机项目---C#基础语法 1 基本概念1.1 准备工具1.2 新建项目2 C#编程基础2.1 命名空间和类2.2 数据类型2.3 控制台输入输出2.3.1 输入输出: write 与 read2.3.2 格式化 : string.Foramt() 与 $2.3.3 赋值与运算2.4 类型转换2.4.1 数值类型之间的转换:(int)2.4…...
电脑经常绿屏(蓝屏)怎么办(解决方法)?
一、排查系统与驱动问题 进入安全模式修复系统 强制重启电脑 3 次触发恢复环境,选择 疑难解答 > 高级选项 > 启动设置 > 重启,按 F5 或 5 进入带网络连接的安全模式3。 在安全模式下,尝试卸载最近安装的软件或更新,尤其…...
clickhouse--本地表和分布式表,副本机制,分片集群
1、本地表和分布式表 ck的表分为两种: 分布式表 一个逻辑上的表,可以理解为数据库中的视图,一般查询都查询分布式表。分布式表引擎会将我们的查询请求路由本地表进行查询,然后进行汇总最终返回给用户。本地表 实际存储数据的表。 …...
react hook useReducer
useReducer useReducer 是 React 中用于状态管理的 Hook,与 useState 不同,它更适合处理复杂的状态逻辑. const [state, dispatch] useReducer(reducer, initialArg, init?) reducer 是一个处理函数,用于更新状态, reducer 里面包含了两个…...
告别阻塞,迎接高效:掌握 AsyncIOScheduler 实现异步任务调度
前言 时间在编程中是宝贵的,直接关联到效率与灵活性,尤其在异步编程里,如何优雅地管理定时任务简直是一门“艺术”。如果你还在用 time.sleep() 来控制延时任务,恐怕你早已体会过它的“痛苦”:程序卡住、线程阻塞、性能急剧下滑。想象一下,你的程序如同一个永远无法按时…...
【基于SprintBoot+Mybatis+Mysql】电脑商城项目之加入购物车和显示购物车列表
🧸安清h:个人主页 🎥个人专栏:【Spring篇】【计算机网络】【Mybatis篇】 🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。 目录 🚀1.加入购物车-数…...
再谈影刀RPA成长学习路线
近期,我将使用影刀RPA开发各电商平台移动端商品信息爬取,实战流程会在QQ群里分享,欢迎大家进群,一起探讨交流! 1. 影刀RPA学习路线概述 1.1 学习目标与意义 学习影刀RPA的目标在于掌握一种高效的工作自动化工具,以提…...
PHP-综合4
[题目信息]: 题目名称题目难度PHP-综合42 [题目考点]: PHP综合训练[Flag格式]: SangFor{Ouk3i63BuShgxqdRcn_9kMNqKFDe5j4f}[环境部署]: docker-compose.yml文件或者docker tar原始文件。 http://分配ip:2087[题目writeup]:…...
学习笔记-沁恒第五讲-米醋
一,设置音量 上次 这次 #include "uart.h" #include "debug.h" void audio_init() { Usart3_Init(); } void audio_play(u8 num) { u8 string[]{0x7e,0x05,0x41,0x00,num,0x05^0x41^0x00^num,0xef}; u8 i; for(i0;i<7;i) { USART_Se…...
【JavaScript】JavaScript 常见概念 - 变量与数据类型 - 运算符 - 条件语句 - 循环 - 函数 - 数组操作 - 对象
1. 变量与数据类型 变量声明 JavaScript 提供了三种方式来声明变量: var(全局或函数作用域,不推荐)let(块级作用域,推荐)const(常量,块级作用域,推荐&…...
Web自动化之Selenium添加网站Cookies实现免登录
在使用Selenium进行Web自动化时,添加网站Cookies是实现免登录的一种高效方法。通过模拟浏览器行为,我们可以将已登录状态的Cookies存储起来,并在下次自动化测试或爬虫任务中直接加载这些Cookies,从而跳过登录步骤。 Cookies简介 …...
AI手机的技术细节
前序:先说各个功能涉及到的技术,再说宏观系统架构。AI手机有这样几个做法,给手机侧边增加一个按键;把手机的语音助手做的很好,能够快速稳定的进行唤醒;通过特殊形式的触摸手机的曲面屏位置等来进行唤醒AI …...
10. 九转金丹炼矩阵 - 矩阵置零(标记优化)
哪吒在数据修仙界中继续他的修炼之旅。这一次,他来到了一片神秘的金丹谷,谷中有一座巨大的九转金丹炉,炉身闪烁着神秘的光芒。金丹炉的入口处有一块巨大的石碑,上面刻着一行文字:“欲破此炉,需以九转金丹之力,炼矩阵之零,标记优化定乾坤。” 哪吒定睛一看,石碑上还有…...
[实现Rpc] 客户端 | Requestor | RpcCaller的设计实现
目录 Requestor类的实现 框架 完善 onResponse处理回复 完整代码 RpcCaller类的实现 1. 同步调用 call 2. 异步调用 call 3. 回调调用 call Requestor类的实现 (1)主要功能: 客户端发送请求的功能,进行请求描述对服务器…...
Java 大视界 -- 深度洞察 Java 大数据安全多方计算的前沿趋势与应用革新(52)
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...
山东大学软件学院nosql实验三
实验题目: 用Java做简单查询(2学时) 实验内容 用API方式,做简单查询。 实验要求 在以下要求中选择至少2个,使用Java语言实现数据查询,最终把数据输出到前端界面。 (1)找出年龄小于20岁的所有学生 &…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...
