当前位置: 首页 > news >正文

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]:…...

学习笔记-沁恒第五讲-米醋

一&#xff0c;设置音量 上次 这次 #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 提供了三种方式来声明变量&#xff1a; var&#xff08;全局或函数作用域&#xff0c;不推荐&#xff09;let&#xff08;块级作用域&#xff0c;推荐&#xff09;const&#xff08;常量&#xff0c;块级作用域&#xff0c;推荐&…...

Web自动化之Selenium添加网站Cookies实现免登录

在使用Selenium进行Web自动化时&#xff0c;添加网站Cookies是实现免登录的一种高效方法。通过模拟浏览器行为&#xff0c;我们可以将已登录状态的Cookies存储起来&#xff0c;并在下次自动化测试或爬虫任务中直接加载这些Cookies&#xff0c;从而跳过登录步骤。 Cookies简介 …...

AI手机的技术细节

前序&#xff1a;先说各个功能涉及到的技术&#xff0c;再说宏观系统架构。AI手机有这样几个做法&#xff0c;给手机侧边增加一个按键&#xff1b;把手机的语音助手做的很好&#xff0c;能够快速稳定的进行唤醒&#xff1b;通过特殊形式的触摸手机的曲面屏位置等来进行唤醒AI …...

10. 九转金丹炼矩阵 - 矩阵置零(标记优化)

哪吒在数据修仙界中继续他的修炼之旅。这一次,他来到了一片神秘的金丹谷,谷中有一座巨大的九转金丹炉,炉身闪烁着神秘的光芒。金丹炉的入口处有一块巨大的石碑,上面刻着一行文字:“欲破此炉,需以九转金丹之力,炼矩阵之零,标记优化定乾坤。” 哪吒定睛一看,石碑上还有…...

[实现Rpc] 客户端 | Requestor | RpcCaller的设计实现

目录 Requestor类的实现 框架 完善 onResponse处理回复 完整代码 RpcCaller类的实现 1. 同步调用 call 2. 异步调用 call 3. 回调调用 call Requestor类的实现 &#xff08;1&#xff09;主要功能&#xff1a; 客户端发送请求的功能&#xff0c;进行请求描述对服务器…...

Java 大视界 -- 深度洞察 Java 大数据安全多方计算的前沿趋势与应用革新(52)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

山东大学软件学院nosql实验三

实验题目&#xff1a; 用Java做简单查询(2学时) 实验内容 用API方式&#xff0c;做简单查询。 实验要求 在以下要求中选择至少2个&#xff0c;使用Java语言实现数据查询&#xff0c;最终把数据输出到前端界面。 &#xff08;1&#xff09;找出年龄小于20岁的所有学生 &…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的&#xff0c;启动是正常的&#xff0c; 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...