C++八股学习心得.4

news/2025/3/28 15:28:19/

1.C++ 类 & 对象

C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计。是 C++ 的核心特性,通常被称为用户定义的类型

用于指定对象的形式,它包含了数据表示法和用于处理数据的方法类中的数据和方法称为类的成员函数在一个类被称为类的成员函数

C++ 类定义

定义一个类,本质上是定义一个数据类型的蓝图类定义是以关键字 class 开头,后跟类的名称类的主体是包含在一对花括号中类定义后必须跟着一个分号或一个声明列表关键字 public 确定了类成员的访问属性在类对象作用域内,公共成员在类的外部是可访问的类外依然可以访问。您也可以指定类的成员为 private 或 protected

定义 C++ 对象

类提供了对象的蓝图,所以基本上,对象是根据类来创建的。声明类的对象,就像声明基本类型的变量一样类的对象的公共数据成员可以使用直接成员访问运算符 (.) 来访问。私有的成员和受保护的成员不能使用直接成员访问运算符 (.) 来直接访问

2.C++ 类成员函数 

类的成员函数是指那些把定义和原型写在类定义内部的函数,就像类定义中的其他变量一样。类成员函数是类的一个成员,它可以操作类的任意对象,可以访问对象中的所有成员成员函数可以定义在类定义内部,或者单独使用范围解析运算符 :: 来定义。在类定义中定义的成员函数把函数声明为内联,即便没有使用 inline 标识符。也可以在类的外部使用范围解析运算符 :: 定义该函数在 :: 运算符之前必须使用类名。调用成员函数是在对象上使用点运算符(.),这样它就能操作与该对象相关的数据

3.C++ 类访问修饰符 

数据隐藏是面向对象编程的一个重要特点,它防止函数直接访问类类型的内部成员。类成员的访问限制是通过在类主体内部对各个区域标记 public、private、protected 来指定的。成员和类的默认访问修饰符是 private

公有(public)成员

公有成员在程序中类的外部是可访问的您可以不使用任何成员函数来设置和获取公有变量的值

私有(private)成员

私有成员变量或函数在类的外部是不可访问的,甚至是不可查看的。只有类和友元函数可以访问私有成员默认情况下,类的所有成员都是私有的。没有使用任何访问修饰符,类的成员将被假定为私有成员实际操作中,我们一般会在私有区域定义数据,在公有区域定义相关的函数,以便在类的外部也可以调用这些函数

保护(protected)成员

保护成员变量或函数与私有成员十分相似,但有一点不同,保护成员在派生类(即子类)中是可访问的

4.C++ 类构造函数 & 析构函数 

类的构造函数

类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。

构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值

带参数的构造函数

默认的构造函数没有任何参数,但如果需要,构造函数也可以带有参数。这样在创建对象时就会给对象赋初始值,有参构造

类的析构函数

类的析构函数是类的一种特殊的成员函数,它会在每次删除所创建的对象时执行。

析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,它不会返回任何值,也不能带有任何参数。析构函数有助于在跳出程序(比如关闭文件、释放内存等)前释放资源。

C++ 拷贝构造函数

系统为对象 B 分配了内存并完成了与对象 A 的复制过程。就类对象而言,相同类型的类对象是通过拷贝构造函数来完成整个复制过程的。

拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。

拷贝构造函数通常用于:

通过使用另一个同类型的对象来初始化新创建的对象。

复制对象把它作为参数传递给函数。

复制对象,并从函数返回这个对象。

如果在类中没有定义拷贝构造函数,编译器会自行定义一个。如果类带有指针变量,并有动态内存分配,则它必须有一个拷贝构造函数。

5.C++ 友元函数 

类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。要声明函数为一个类的友元,需要在类定义中该函数原型前使用关键字 friend

6.C++ 内联函数

如果想把一个函数定义为内联函数,则需要在函数名前面放置关键字 inline,在调用函数之前需要对函数进行定义。如果已定义的函数多于一行,编译器会忽略 inline 限定符。

类定义中的定义的函数都是内联函数,即使没有使用 inline 说明符。有了内联函数,就能像调用一个函数那样方便地重复使用一段代码,而不需要付出执行函数调用的额外开销。很显然,使用内联函数会是最终可执行程序的体积增加。以空间换取时间,或消耗时间来增加空间,

7.C++ this 指针

在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象

友元函数没有 this 指针,因为友元不是类的成员。只有成员函数才有 this 指针

8.C++ 指向类的指针

一个指向 C++ 类的指针与指向结构的指针类似访问指向类的指针的成员,需要使用成员访问运算符 ->,就像访问指向结构的指针一样与所有的指针一样,您必须在使用指针之前,对指针进行初始化

9.C++ 类的静态成员

我们可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本

静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零。我们不能把静态成员放置在类的定义中,但是可以在类的外部通过使用范围解析运算符 :: 来重新声明静态变量从而对它进行初始化,

如果把函数成员声明为静态的,就可以把函数与类的任何特定对象独立开来静态成员函数即使在类对象不存在的情况下也能被调用静态函数只要使用类名加范围解析运算符 :: 就可以访问。

静态成员函数只能访问静态数据成员不能访问其他静态成员函数和类外部的其他函数。

静态成员函数有一个类范围他们不能访问类的 this 指针您可以使用静态成员函数来判断类的某些对象是否已被创建

10.C++ 继承

面向对象程序设计中最重要的一个概念是继承继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行时间的效果。

创建一个类时,您不需要重新编写新的数据成员和成员函数只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类,新建的类称为派生类

继承代表了 is a 关系

总结:

面向对象编程,类用户可以自定义数据类型,类指定了对象形式,数据和数据处理方法都是类的成员,函数就是成员函数,类关键字class+名称+花括号,public共有属性类内类外都可以访问,private和protected私有属性和保护属性,对象根据类创建,共有属性数据可以直接使用.来进行访问

类成员函数是对成员数据进行操作,可以在类内定义,也可以使用::在类外定义,使用.来访问成员数据

访问修饰符:public,private,protected,如果没有指定那么默认则是private,public类内类外都可以访问,私有属性只有类和友元函数可以访问,类外不可访问,默认私有属性,一般情况私有属性定义数据,共有属性定义函数,保护属性与私有属性类似,只是派生类可以访问(继承)

构造函数成员函数,创建对象时候调用,构造函数名与类名完全相同,不会返回任何类型,默认是无参构造函数,有参构造就是在创建对象就给对象赋值,析构函数删除对象执行,函数名称与类名相同在前面加~,也不返回任何类型数据,拷贝构造函数使用创建过对象来创建新的对象,如果类内有指针,且有动态内存,需要定义拷贝构造

友元函数 是类外函数有权访问私有和保护成员,不是成员函数,函数是类的友元需要加friend关键字

内联函数需要关键字inline

c++this指针对象用来访问自己的地址,成员函数内部用来调用对象,成员函数有this指针

访问类的指针需要使用->来访问,指针使用的时候需要初始化

static可以使类的成员变为静态变量或者函数,只有一个副本,可以在类外利用::来重新声明静态变量对其进行初始化,静态成员函数::也可以访问,静态成员函数只能访问静态数据成员,不能访问其他静态成员函数和类外其他成员函数,不能使用this指针,

继承,依据一个类来定义一个类,不需重新创建成员函数和数据成员,指定新的类(派生类)来继承已有的类(基类)即可


http://www.ppmy.cn/news/1291533.html

相关文章

硬件安全模块 (HSM)、硬件安全引擎 (HSE) 和安全硬件扩展 (SHE)的区别

术语 硬件安全模块 (HSM) :Hardware Security Modules硬件安全引擎 (HSE) :Hardware Security Engines安全硬件扩展 (SHE) : Secure Hardware Extensions 介绍 在汽车行业中,硬件安全模块 (HSM)、硬件安全引擎 (HSE) 和安全硬件…

性能测试之(六):JMeter 元件

元件(多个类似功能组件的容器) 组件:封装的方法,比如取样器中的发送请求的方法 一、常见的元件 1、取样器:发送请求2、逻辑处理:控制语句执行顺序3、前置处理器:在请求(取样器&…

学习调整echarts中toolbox位置toolBox工具栏属性

学习调整echarts中toolbox位置toolBox工具栏属性 toolbox工具栏属性介绍示例代码代码参数说明 toolbox工具栏属性介绍 参考网址:https://echarts.apache.org/zh/option.html#tooltip 属性类型说明toolbox.showbooleanboolean 默认值为true,是否显示工具…

静态S5在项目管理中的应用与案例分享

静态S5作为一种强大的数据分析工具,不仅在数据处理和可视化方面表现出色,还在项目管理中发挥着重要作用。本篇将通过实际案例分享,探讨静态S5在项目管理中的应用与优势。 一、静态S5在项目管理中的应用 项目进度管理:静态S5通过…

CMake入门教程【核心篇】属性管理set_property和get_property

😈「CSDN主页」:传送门 😈「Bilibil首页」:传送门 😈「本文的内容」:CMake入门教程 😈「动动你的小手」:点赞👍收藏⭐️评论📝 文章目录 1.概述2.设置属性 - …

Python3 列表--20240104

Python3 列表 序列是 Python 中最基本的数据结构。 序列中的每个值都有对应的位置值,称之为索引,第一个索引是 0,第二个索引是 1,依此类推。 Python 有 6 个序列的内置类型,但最常见的是列表和元组。 列表都可以进行的操作包括索引,切片,加,乘,检查成员。 此外,Pyth…

SpringBoot实用开发(九)-- RedisTemplate处理ZSet类型的数据

目录 1.添加元素(有序集合是按照元素的score值由小到大进行排列) 2.删除对应的value,value可以为多个值

【C语言数据结构】堆排序讲解

>>知识传送站&#xff1a; 排序算法&#xff1a;堆排序【图解代码】_哔哩哔哩_bilibili 一.代码部分&#xff1a; //堆排序 #include<stdio.h> #include<stdlib.h> #include<string.h> void swap(int* a,int* b)//用于换位 {int tamp;tamp*a;*a*b;*…