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;

类中含有纯虚函数,该类是抽象类,不能实例化。

在其派生类中必须对该函数重定义,否则该派生类也成了 抽象类。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

20250212:https通信

1:防止DNS劫持:使用 https 进行通信。 因为是SDK授权开发,需要尽量压缩so库文件和三方依赖。所以第一想法是使用 head only 的 cpp-httplib 进行开发。 cpp-httplib 需要 SSL 版本是 3.0及以上。但本地已经在开发使用的是1.0.2a版本,不满足需求。 方案1:升级OpenSSL 将Op…

数据驱动未来!天合光能与永洪科技携手开启数字化新篇章

在信息化时代的今天,企业间的竞争早就超越了传统产品与服务的范畴,新的核心竞争力即——数据处理能力和信息技术的应用。作为数据技术领域的领军者,永洪科技凭借其深厚的技术积累和丰富的行业经验,成功助力天合光能实现数字化升级…

Android之图片保存相册及分享图片

文章目录 前言一、效果图二、实现步骤1.引入依赖库2.二维码生成3.布局转图片保存或者分享 总结 前言 其实现在很多分享都是我们自定义的,更多的是在界面加了很多东西,然后把整个界面转成图片保存相册和分享,而且现在分享都不需要第三方&…

政安晨的AI大模型训练实践 十一 - 基于千问的Qwen2.5-VL-3B-Instruct 多模态模型进行微调参数认知 2

政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 微调一个大模型要准备的背景知识还是很多的。 本节我们介绍训练阶段的一些主要参数。 这是训…

心理咨询小程序的未来发展

还在眼巴巴看着心理咨询行业的巨大蛋糕却无从下口?今天就来聊聊心理咨询小程序的无限潜力 据统计,全球超 10 亿人受精神心理问题困扰,国内心理健康问题也日益突出,心理咨询需求猛增。可传统心理咨询预约难,费用高&…

反欺诈平台|基于Springboot+vue的反欺诈平台(源码+数据库+文档)​

目录 基于Springbootvue的反欺诈平台系统 一、前言 二、系统设计 三、系统功能设计 5.1用户信息管理 5.2 反诈视频管理 5.3视频收藏管理 5.1案例分析管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介…

P8772 [蓝桥杯 2022 省 A] 求和--简单题的陷阱——(不开long long见祖宗!!!

P8772 [蓝桥杯 2022 省 A] 求和 题目分析代码 题目 分析 cnmmd 没什么好分析的&#xff0c;n≤210^5&#xff0c;tmd 我拿着a[100010]算半天 简单题的陷阱- - 代码 #include <iostream> #include <vector> #include <string> #include <algorithm> #i…

如何让传统制造企业从0到1实现数字化突破?

随着全球制造业不断向智能化、数字化转型&#xff0c;传统制造企业面临着前所未有的机遇与挑战。数字化转型不仅是技术的革新&#xff0c;更是管理、文化、业务流程等全方位的变革。从零开始&#xff0c;如何带领一家传统制造企业走向数字化突破&#xff0c;是许多企业领导者面…

TMDS视频编解码算法

因为使用的是DDR进行传输&#xff0c;即双倍频率采样&#xff0c;故时钟只用是并行数据数据的5倍&#xff0c;而不是10倍。 TMDS算法流程&#xff1a; 视频编码TMDS算法流程实现&#xff1a; timescale 1 ps / 1ps //DVI编码通常用于视频传输&#xff0c;将并行数据转换为适合…

SpringBoot源码解析(十一):准备应用上下文

SpringBoot源码系列文章 SpringBoot源码解析(一)&#xff1a;SpringApplication构造方法 SpringBoot源码解析(二)&#xff1a;引导上下文DefaultBootstrapContext SpringBoot源码解析(三)&#xff1a;启动开始阶段 SpringBoot源码解析(四)&#xff1a;解析应用参数args Sp…

跟李沐学AI:InstructGPT论文精读(SFT、RLHF)

原论文&#xff1a;[2203.02155] Training language models to follow instructions with human feedback 原视频&#xff1a;InstructGPT 论文精读【论文精读48】_哔哩哔哩_bilibili 简介 1. RLHF 的基本概念 RLHF 是一种结合强化学习和人类反馈的训练方法&#xff0c;旨在…

基于YOLO11深度学习的运动鞋品牌检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

条款24:若所有参数皆需类型转换,请为此采用 non-member 函数

1.针对隐式转换的情况&#xff0c;可能会出现误用的情况 示例代码 #include <iostream>class Rational { public:Rational(float iNum1 1, float iNum2 2) { fNum iNum1 / iNum2; }~Rational() {}//自定义逻辑const Rational operator * (const Rational& rhs) …

无人机实战系列(番外一)本地图像+Apple ML Depth Pro

这篇文章作为系列文章 “无人机实战系列” 的一篇番外文章&#xff0c;主要测试了下 Apple 推出的一个基于机器学习的单目图像转深度的工具 ml-depth-pro&#xff0c;这个也是我在找这方面工具时意外发现的一个仓库&#xff0c;后期仍然会以 Depth Anything V2 为主线进行记录。…

MySQL数据库连接池泄露导致MySQL Server超时关闭连接

前言 最近做项目&#xff0c;发现老项目出现xxx&#xff0c;这个错误其实很简单&#xff0c;出现在MySQL数据库Server端对长时间没有使用的client连接执行清楚处理&#xff0c;因为是druid数据库&#xff0c;且在github也出现这样的issue&#xff1a;The last packet successf…

人工智能基础知识笔记一:核函数

1、简介 核函数有严格的数学要求&#xff0c;凡满足Mercer定理【参考本文第9章节】的都可以作为核函数。Mercer 定理确保高维:间任意两个向量的内积一定可以被低维空间中两个向量的某种计算表示(多数时候是内积的某换)。本节通过一个例子讲解核函数的使用。 2、核函数定义 设…

本地部署DeepSeek-R1(Ollama+Docker+OpenWebUI知识库)

安装Ollama 打开 Ollama官网 https://ollama.com/下载安装 Ollama服务默认只允许本机访问&#xff0c;修改允许其它主机访问 OLLAMA_HOST0.0.0.0 ollama serve也可以添加系统环境变量 都知道模型体积很大&#xff0c;顺便也通过环境变量修改模型存放位置&#xff0c;我这…

图论算法篇:BFS宽度优先遍历

那么bfs算法的大名想必大家都一定听闻过&#xff0c;那么也许有的人在认识我们bfs算法之前是先接触的我们的dfs算法&#xff0c;那么目前我们的算法世界中的两种搜索算法就是我们的dfs和我们的bfs&#xff0c;那么废话不多说&#xff0c;就让我们进入bfs算法的学习 BFS算法原理…

初识.git文件泄露

.git 文件泄露 当在一个空目录执行 git init 时&#xff0c;Git 会创建一个 .git 目录。 这个目录包含所有的 Git 存储和操作的对象。 如果想备份或复制一个版本库&#xff0c;只需把这个目录拷贝至另一处就可以了 这是一种常见的安全漏洞&#xff0c;指的是网站的 .git 目录…

【SpringBoot】【JWT】使用JWT的claims()方法存入Integer类型数据自动转为Double类型

生成令牌时使用Map存入Integer类型数据&#xff0c;将map使用claims方法放入JWT令牌后&#xff0c;取出时变成Double类型&#xff0c;强转报错&#xff1a; 解决&#xff1a; 将Integer转为String后存入JWT令牌&#xff0c;不会被自动转为其他类型&#xff0c;取出后转为Integ…