C++核心知识

一、类

  • 类的声明:
    class 类名
    {
    [public:]
    [数据成员声明]
    [函数成员声明]
    [private:]
    [数据成员声明]
    [函数成员声明]
    [protected:]
    [数据成员声明]
    [函数成员声明]
    }

  • 类函数成员的实现
    类声明体内直接实现
    类体外,使用域预算符(::) 如 short Cperson::Getage(){}

  • 类的数据成员需要初始化,但不能在类的声明中初始化。在类的构造函数中进行初始化,或使用构造函数初始化列表

  • 复制构造函数:保留对象副本,用于以后恢复对象的状态,复制构造函数的参数时一个已经初始化的类对象

  • Cperson(Cperson & copyperson)

  • 析构函数:一个类只能定义一个析构函数;析构函数不能重载,析构函数不能使用return语句,不能加void关键字

  • 类成员的访问属性:public,对外可见,对内可见;private(默认),对外不可见,对内可见;protected,对外不可见,对内可见,对派生类可见

  • 嵌套类,在另一个类的定义内部定义的类;外围类不能访问嵌套类的私有成员(友元类除外),只允许在外围的类域中使用,在其他的类域或作用域中不可见。

  • 局部类:在函数中定义的类,在函数外不能访问的

  • 友元:使用friend关键字,可以让特定的函数或别的类的所有成员函数对私有数据成员进行访问。

  • 友元类:当用户希望另一个类能够访问当前类的私有成员时,可以在当前类中将另一个类作为自己的友元类,这样在另一个类中九可以访问当前类的私有成员了

  • 友元方法:控制另一个类的函数对当前类的私有成员的访问。使用域符号 friend class::函数

  • 命名空间 :一个命名的范围区域,程序员在这个特定的范围内创建的所有标识符都是唯一的

  • namespace 命名空间名

  • { 常量,比那辆,函数等对象的定义}

  • 引用命名空间成员
    使用作用域限定符“::” 命名空间::成员
    使用using namespace 命名空间名, 直接引用成员即可

  • 继承与派生

  • 类继承的形式

  • class 派生类名标识符:[继承方式] 基类标识符

  • {

  • [访问控制修饰符]

  • 成员声明列表

  • }

  • 继承方式:

  • public :在公有继承中,基类的公有(public)和保护(protected)成员在派生类中仍然是公有和保护成员,但基类的私有(private)成员在派生类中是不可访问的

  • protected :在保护继承中,基类的公有和保护成员在派生类中变为保护成员,而基类的私有成员在派生类中仍然是不可访问的

  • private:在私有继承中,基类的所有成员(无论是公有、保护还是私有)在派生类中都是私有的。这意味着派生类不能直接访问这些成员,但可以通过在派生类中定义公有或保护成员函数来间接访问它们

  • 构造函数的访问

  • 构造函数,先调用父类的构造函数,再调用子类的构造函数,释放时,先调用当前类的析构函数,再调用父类的析构函数

  • 子类显示调用父类构造函数:创建子类时,默认调用父类默认构造函数,若要调用带参数构造函数,需要显示调用

  • 子类隐藏父类成员函数:在子类定义一个和父类一样的成员函数

  • 重载运算符

  • operator 类型名()

  • {}

  • 重载运算符时不能改变运算符的操作数的个数,原有的优先级,结合性,语法结构。不能重载的运算符(. .* :: ? :)

  • 多重继承

  • 允许从多个父类继承公有和受保护的成员,基类标识符之间用“,”分隔

  • 派生类在调用函数时,先在自身的作用域内寻找,找不到再到基类中寻找。

  • 多重继承的构造函数的顺序:以类派生表中声明的顺序为准。

  • 多态

  • 不同功能的函数可以用同一个函数名,这样就可以用一个函数名调用不同内容的函数,发出同样的消息被不同类型的对象接收时,导致完全不同的行为。

  • 函数重载和虚函数

  • 虚函数:在基类中使用关键字virtual声明函数。在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数。

  • 虚函数的作用:允许在派生类中重新定义与基类同名的函数,并可以通过基类指针或引用来访问基类和派生类中的同名函数。

  • 纯虚函数:可以不用在基类中定义,只需要在基类中声明。纯虚函数所在的基类不能产生对象,只能产生指针,虚函数的对象可以产生对象
    class 类名
    {
    virtual 类型 函数名 (参数列表)=0;
    }

  • 纯虚函数没有函数体

  • 最后面的“=0”并不表示函数的返回值为0,只是形式上的作用,告诉编译系统“这是纯虚函数”。

  • 这是一个声明语句,最后应有分号

  • 纯虚函数只有函数名而不具备函数功能,不能被调用,只是通知编译系统“在这里声明一个虚函数,留待派生类中定义”,在派生类中对此函数定义后,才能具备函数功能,可被调用

  • 纯虚函数的作用是在基类中为其派生类保留一个函数的名称,以便派生类根据需要对它进行定义,以实现多态。若在派生类中没对纯虚函数定义,则该纯虚函数在派生类中仍然为纯虚函数

  • 虚函数表:编译器为每个对象提供了一个虚表指针,这个指针指向了对象所属类的虚表,在程序运行时,根据对象的类型去初始化虚拟指针,从而让虚拟指针正确的指向了所属类的虚表,在调用虚函数的时候才能正确找到正确的函数。

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

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

相关文章

Linux安装Docker方法

自动安装 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun手动安装 1.安装gcc yum -y install gcc2.安装gcc-c yum -y install gcc-c以上2步不装也没事 3.依赖环境 安装依赖环境 yum -y install yum-utils device-mapper-persistent-datalvm24.添加…

项目训练营第五天

项目训练营第五天 后端代码优化 通用异常处理类编写 Data public class BaseResponse<T> implements Serializable {int code;T data;String message null;String description null;public BaseResponse(int code, T data, String message, String description) {th…

【智能算法】覆盖算法

目录 一、概述 二、常见覆盖算法 2.1 贪心算法 2.1.1 定义 2.1.2 特点 2.1.3 matlab代码解析 2.2 排列算法 2.2.1 定义 2.2.2 特点 2.2.3 matlab代码解析 2.3 基于生命周期的覆盖算法 2.3.1 定义 2.3.2 特点 2.3.3 matlab代码解析 2.4 分簇算法 2.4.1 定义 2.4…

数据库表空间的使用

此处以PosrgresSql数据库为例&#xff1a; 在PostgreSQL中&#xff0c;表空间&#xff08;Tablespace&#xff09;用于控制数据库对象&#xff08;如表、索引&#xff09;的存储位置。使用表空间可以将数据库对象存储在特定的磁盘位置&#xff0c;从而优化性能和管理存储。以下…

Qt画实时曲线图

Qt引入QcustomPlot 首先下载QcustomPlot源代码&#xff0c;https://github.com/qcustomplot/qcustomplot 下载zip文件 运行所下载的项目生成库文件libqcustomplotd2.a文件和qcustomplotd2.dll文件。 在项目中添加printsupport。 并将qcustomplot.h文件和qcustomplot.cpp文…

如何在 C++/Qt/CMake 项目中构建 Rust 代码

问题描述 我有一个使用 CMake 构建的现有 C/Qt 项目&#xff0c;我想开始添加 Rust 代码&#xff0c;并能够从主 C 代码库中调用这些 Rust 代码。应该如何组织项目结构&#xff1f; 现有项目结构 ./CMakeLists.txt ./subproject-foo/CMakeLists.txt ./subproject-foo/src/..…

Tomcat(1)

Tomcat(1) 1.Tomcat简介 Tomcat和Nginx、Apache(http)、Web服务器一样&#xff0c;具有处理HTML面的功能&#xff0c;不过tomcat处理静态HTML能力不如nginx服务器 一个tomcat默认并发数是200(官方) 使用方案&#xff1a; nginx和tomcat配合&#xff0c;nginx处理静态&#x…

万物皆对象,你信吗?

**内存空间和数据都消失&#xff0c;数据怎么会消失的&#xff1f;**空间没了&#xff0c;数据自然也跟着消失。因为数据就是在空间里面的。就像宇宙大爆炸&#xff0c;我们还能存在嘛&#xff0c;是不是已经undefined了。「一块小内存上有2种数据类型」 内部存储的数据 地址值…

Trilium Notes浏览器插件保存网页内容到docker私有化部署

利用Trilium浏览器插件可以很方便的把网页内容保存到Trilium&#xff0c;需要先在docker部署好trilium&#xff0c;还没有部署的可以先看这篇文章&#xff1a;trilium笔记私有化部署-www.88531.cn资享网 1.下载Trilium浏览器插件&#xff1a;https://www.npspro.cn/33462.html…

高考志愿填报秘籍:工具篇

选择适合自己的大学和专业&#xff0c;对广大考生来说至关重要。从某种程度上来说&#xff0c;决定了考生未来所从事的行业和发展前景。为了帮助广大考生更加科学、合理地填报志愿&#xff0c;选择适合自己的大学和专业&#xff0c;本公众号将推出如何用AI填报高考志愿专栏文章…

Linux `screen` 命令详解与使用指南

Linux screen 命令详解与使用指南 在Linux系统中&#xff0c;screen 是一个非常有用的工具&#xff0c;它允许用户在单个终端会话中运行多个进程&#xff0c;并能在会话之间切换。screen 特别适用于远程登录&#xff08;如通过SSH&#xff09;时&#xff0c;确保即使网络连接断…

华为200人园区网有线和无线

实验描述&#xff1a; 1 内网有有线业务、内部无线、外部无线三种业误。 2 内网服务器配置静态IP&#xff0c;网关192.168.108.1。 3 sW1和R1之间使用v1an200 192.168.200.9/30 互联。 4 R2向运营商申请企业宽带并获得了1个固定公网IP&#xff1a; 200.1.1.1 子网掩码 255.255.…

JavaScript语法特性篇-空值合并运算符(??)

1、基本使用 空值合并运算符&#xff08;??&#xff09;英文名称为 Nullish coalescing operator&#xff0c;是一个逻辑运算符。 特性&#xff1a;当左侧的操作数为 null 或者 undefined 时&#xff0c;返回其右侧操作数&#xff0c;否则返回左侧操作数。 const foo nul…

Hyperf 在 NginxProxyManager 如何配置 websocket?

新建代理 填写域名等服务信息&#xff0c;选择支持WebSockets。 创建 SSL 编写nginx配置 location /message.io{proxy_pass http://<你的ip>:<对应端口号>;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "Upg…

ios生成随机颜色

写demo&#xff0c;太需要这个随机颜色了&#xff0c;每次都懒得写&#xff0c;从网上找&#xff0c;但是找出来的又都是良莠不齐&#xff0c;还需要再修改。 是在懒得修改&#xff0c;就找了一个合适的&#xff0c;从自己的博客找&#xff0c;减少筛选代码的成本。 OC版本 …

最新《pvz植物大战僵尸杂交版》整合安装包,全面支持Android、ios、Windows,附教程!

今天&#xff0c;阿星要聊聊最近全网大火的一款老游戏——《植物大战僵尸》杂交版。 虽然它不是什么3A大作&#xff0c;但在阿星的心里&#xff0c;它永远是那个让人回味无穷的经典。记得十年前&#xff0c;阿星和大多数玩家一样&#xff0c;玩的都是盗版。那时候的《植物大战…

MES管理系统中的仓库管理功能有哪些用途

在当今制造业迅猛发展的背景下&#xff0c;企业对于车间生产调度的需求日益迫切。为此&#xff0c;MES管理系统应运而生&#xff0c;它作为一款专注于车间生产调度的管理信息系统&#xff0c;正逐步成为制造业提升生产效率、优化资源配置的利器。特别是其在仓储和物流管理方面的…

YOLOv8进行对象检测与关键点定位:实时计算关键点间实际距离并可视化

主要功能如下&#xff1a; 该脚本主要实现了使用预训练的YOLO模型对输入图片进行对象检测与关键点定位&#xff0c;计算特定关键点之间的实际距离&#xff0c;并在图片上可视化这些信息&#xff08;包括边界框、关键点标记、实际距离文字标注&#xff09;&#xff0c;最后保存…

解决Java中的IllegalThreadStateException异常的方法

解决Java中的IllegalThreadStateException异常的方法 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在Java编程中&#xff0c;IllegalThreadStateException异…

代码随想录-Day38

509. 斐波那契数 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) 1 F(n) F(n - 1) F(n - 2)&#xff0c;其中 …