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;

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在 Mac mini M2 上本地部署 DeepSeek-R1:14B:使用 Ollama 和 Chatbox 的完整指南

随着人工智能技术的飞速发展,本地部署大型语言模型(LLM)已成为许多技术爱好者的热门选择。本地部署不仅能够保护隐私,还能提供更灵活的使用体验。本文将详细介绍如何在 Mac mini M2(24GB 内存)上部署 DeepS…

【Godot4.3】基于绘图函数的矢量蒙版效果与UV换算

概述 在设计圆角容器时突发奇想: 将圆角矩形的每个顶点坐标除以对应圆角矩形所在Rect2的size,就得到了顶点对应的UV坐标。然后使用draw_colored_polygon,便可以做到用图片填充圆角矩形的效果。而且这种计算的效果就是图片随着其填充的图像缩…

51单片机-AT24CXX存储器工作原理

1、AT24CXX存储器工作原理 1.1、特点: 与400KHz,I2C总线兼容1.8到6.0伏工作电压范围低功耗CMOS技术写保护功能当WP为高电平时进入写保护状态页写缓冲器自定时擦写周期100万次编程/擦除周期可保存数据100年8脚DIP SOIC或TSSOP封装温度范围商业级和工业级…

Linux网络 网络层

IP 协议 协议头格式 4 位版本号(version): 指定 IP 协议的版本, 对于 IPv4 来说, 就是 4. 4 位头部长度(header length): IP 头部的长度是多少个 32bit, 也就是 4 字节,4bit 表示最大的数字是 15, 因此 IP 头部最大长度是 60 字节. 8 位服务类型(Type Of Service):…

Unity百游修炼(1)——FootBall详细制作全流程

一、引言 游玩测试: Football 游玩测试 1.项目背景与动机 背景:在学习 Unity 的过程中,希望通过实际项目来巩固所学知识,同时出于对休闲小游戏的喜爱,决定开发一款简单有趣的小游戏加深自己的所学知识点。 动机&#…

C语言(13)------------>do-while循环

1.do-while循环的语法 我们知道C语言有三大结构,顺序、选择、循环。我们可以使用while循环、for循环、do-while循环实现循环结构。之前的博客中提及到了前两者的技术实现。可以参考: C语言(11)------------->while循…

【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…

SQL:DQL数据查询语言以及系统函数(oracle)

SQL Structured Query Language,结构化查询语言, 是一种用于管理和操作关系数据库的标准编程语言。 sql的分类 DQL(Data Query Language):数据查询语言 DDL(Data Definition Language):数据…

从单片机的启动说起一个单片机到点灯发生了什么下——使用GPIO点一个灯

目录 前言 HAL库对GPIO的抽象 核心分析:HAL_GPIO_Init 前言 我们终于到达了熟悉的地方,对GPIO的初始化。经过漫长的铺垫,我们终于历经千辛万苦,来到了这里。关于GPIO的八种模式等更加详细的细节,由于只是点个灯&am…

提效10倍:基于Paimon+Dolphin湖仓一体新架构在阿里妈妈品牌业务探索实践

1. 业务背景 阿里妈妈品牌广告数据包括投放引擎、下发、曝光、点击等日志,面向运筹调控、算法特征、分析报表、诊断监控等应用场景,进行了品牌数仓能力建设。随着业务发展,基于Lambda架构的数仓开发模式,缺陷日益突出:…

一文详解U盘启动UEFI/Legacy方式以及GPT/MBR关系

对于装系统的老手而说一直想研究一下装系统的原理,以及面对一些问题时的解决思路,故对以前的方法进行原理上的解释,主要想理解其底层原理。 引导模式 MBR分区可以同时支持UEFI和Legacy引导,我们可以看一下微pe制作的启动盘&#…

基于Docker的前端环境管理:从开发环境到生产部署的实现方案

# 基于Docker的前端环境管理:从开发环境到生产部署的实现方案 简介及前端开发环境挑战 简介 是一种容器化平台,可以将应用程序及其依赖项打包为一个容器,提供一种轻量级、可移植的环境。它能够简化开发、部署和运维的流程,提高…

连锁管理系统的五大核心设计及 PHP 源码分享

在当今竞争激烈的连锁商业领域,高效的管理系统是企业脱颖而出的关键。商淘云连锁管理系统凭借其卓越的功能和灵活的架构,为连锁企业提供了强大的运营支持。在这里详细介绍其五大核心设计,并分享相关的 PHP 源码示例。 一、总部进销存管理 &a…

C语言基本知识------指针(4)

1. 回调函数是什么? 回调函数就是⼀个通过函数指针调用的函数。 如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数 时,被调⽤的函数就是回调函数。 void qsort(void base,//指针…

MTK-Android13-包安装器PackageInstaller 静默安装实现

目的 我们最终是为了搞明白安装的整个流程。一方面通过安卓系统自带的包安装器来了解PMS 安装流程;另一方面熟悉框架层Framework 针对Android apk 安装流程。 前两篇文章分析了PackagerInstaller 安装流程。 Android13-包安装器PackageInstaller-之apk安装跳转 An…

qt-C++笔记之创建和初始化 `QGraphicsScene` 和 `QGraphicsView` 并关联视图和场景的方法

qt-C++笔记之创建和初始化 QGraphicsScene 和 QGraphicsView 并关联视图和场景的方法 code review! 参考笔记 1.qt-C++笔记之创建和初始化 QGraphicsScene 和 QGraphicsView 并关联视图和场景的方法 2.qt-C++笔记之QGraphicsScene和 QGraphicsView中setScene、通过scene得到vie…

《一起打怪兽吧》——自制一款Python小游戏

《一起消灭怪兽吧》——在深夜的屏幕前,你是指引光明的勇者。键盘化作利剑,用方向键在像素战场游走,发射吧,每次击杀都有代码绽放的烟火。这款由Python与Pygame铸就的小游戏,让0与1的世界生长出童真的浪漫。 文章目录…

IDEA中查询Maven项目的依赖树

在Maven项目中,查看项目的依赖树是一个常见的需求,特别是当你需要了解项目中直接或间接依赖了哪些库及其版本时。你可以通过命令行使用Maven的dependency:tree插件来做到这一点。这个命令会列出项目中所有依赖的树状结构。 打开idea项目的终端&#xff…

Maven——Maven开发经验总结(1)

摘要 本文总结了 Maven 开发中的多个关键经验,包括如何根据版本号决定推送到 releases 或 snapshots 仓库,如何在构建过程中跳过测试,父项目如何控制子项目依赖版本,父项目依赖是否能传递到子项目,如何跳过 Maven dep…

05. Springboot admin集成Actuator(一)

目录 1、前言 2、Actuator监控端点 2.1、健康检查 2.2、信息端点 2.3、环境信息 2.4、度量指标 2.5、日志文件查看 2.6、追踪信息 2.7、Beans信息 2.8、Mappings信息 3、快速使用 2.1、添加依赖 2.2、添加配置文件 2.3、启动程序 4、自定义端点Endpoint 5、自定…