C++面向对象学习笔记三

本文学习大佬的文章,所摘录和整理的一些知识
《C++面向对象程序设计》✍千处细节、万字总结(建议收藏)_c++面向对象程序设计千处细节-CSDN博客

文章目录

 文章目录

 前言

正文

const修饰符

void型指针

内联函数

带有默认参数值的函数 

new和delete运算符


前言

本文补充了C++的一些基础知识点


正文

const修饰符

在C语言中,我们常用define来定义常量

例如#define PI 3.14

C++提供了一种更灵活、更安全的方式来定义常量,即使用const修饰符来定义常量。

例如const float PI = 3.14;

与此同时的是,const可以与指针一起使用,它们的组合情况复杂,可归纳为3种:指向常量的指针、常指针和指向常量的常指针。 

指向常量的指针:一个指向常量的指针变量。我们不能修改指针指向的变量,但是,由于pc是一个指向常量的普通指针变量,不是常指针,因此可以改变pc所指的地址,从而改变值

int num = 10;
const int* ptr = #  // 声明一个指向常量的整型指针
// *ptr = 20; 错误,不能通过ptr修改num的值
num = 30;   // 可以直接修改num的值

常指针:将指针变量所指的地址声明为常量 ,创建一个常指针,一个不能移动的固定指针,可更改内容,但不能改变地址。

int num = 10;
int* const ptr = #  // 声明一个常整型指针
// ptr = nullptr; 错误,无法改变ptr所存储地址的值
*ptr = 20;   // 可以通过ptr修改num的值

指向常量的常指针:这个指针所指的地址不能改变,它所指向的地址中的内容也不能改变。

const int num = 10;
const int* const ptr = #  // 声明一个既是常整型又是指向常量的指针
// ptr = nullptr; 错误,无法改变ptr所存储地址的值
// *ptr = 20; 错误,无法通过ptr修改num的值

void型指针

这里想讲述的是void类型声明的指针,而并非讲述void所表示的无值
将void作为指针的类型时,它却表示不确定的类型。这种void型指针是一种通用型指针,也就是说任何类型的指针值都可以赋给void类型的指针变量。

需要指出的是,这里说void型指针是通用指针,是指它可以接受任何类型的指针的赋值,但对已获值的void型指针,对它进行再处理,如输出或者传递指针值时,则必须再进行显式类型转换,否则会出错。

    void* pc;int i = 123;char c = 'a';pc = &i;cout << pc << endl;         //输出指针地址006FF730cout << *(int*)pc << endl;  //输出值123pc = &c;cout << *(char*)pc << endl; //输出值a

由于void类型指针需要进行显式类型转换,所以代码中存在(int*/char*)这样类型转化的操作,从而达到输出或者传递指针值的效果。

内联函数

在函数名前冠以关键字inline,该函数就被声明为内联函数。每当程序中出现对该函数的调用时,C++编译器使用函数体中的代码插入到调用该函数的语句之处,同时使用实参代替形参,以便在程序运行时不再进行函数调用。引入内联函数主要是为了消除调用函数时的系统开销,以提高运行速度。

说明:

内联函数在第一次被调用之前必须进行完整的定义,否则编译器将无法知道应该插入什么代码
在内联函数体内一般不能含有复杂的控制语句,如for语句和switch语句等
使用内联函数是一种空间换时间的措施,若内联函数较长,较复杂且调用较为频繁时不建议使用

#include <iostream>
using namespace std;
// 内联函数定义
inline int add(int a, int b) {return a + b;
}int main() {int num1 = 5;int num2 = 10;// 内联函数调用int result = add(num1, num2);cout << "Result: " << result << endl;return 0;
}

带有默认参数值的函数 

当进行函数调用时,编译器按从左到右的顺序将实参与形参结合,若未指定足够的实参,则编译器按顺序用函数原型中的默认值来补足所缺少的实参。
即如果没有传入足够的实参,就会用默认参数值自动补全。

void init(int x = 5, int y = 10);
init (100, 19);   // 100 , 19
init(25);         // 25, 10
init();           // 5, 10

 同时,取默认值的函数参数必须出现在没有默认值的右边

如    int fun(int a, int b, int c = 111);

在函数调用时,若某个参数省略,则其后的参数皆应省略而采取默认值。不允许某个参数省略后,再给其后的参数指定参数值。

new和delete运算符

C语言中使用函数malloc()free()来进行动态内存管理。C++则提供了运算符newdelete来做同样的工作,而且后者比前者性能更优越,使用更灵活方便。

 指针变量名 = new 类型int *p;p = new int;
delete 指针变量名delete p;

1、用运算符new分配的空间,使用结束后应该用也只能用delete显式地释放,否则这部分空间将不能回收而变成死空间。
2、在使用运算符new动态分配内存时,如果没有足够的内存满足分配要求,new将返回空指针(NULL)。
3、使用运算符new可以为数组动态分配内存空间,这时需要在类型后面加上数组大小。

指针变量名 = new 类型名[下标表达式];
int *p = new int[10];

总结

本文主要对const与指针,void型指针,内联函数与带默认值函数,以及new和delete运算符进行了相关知识的摘录。

推荐学习博客 https://xxetb.xetslk.com/s/4GgGz6

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

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

相关文章

Maven+Junit5 + Allure +Jenkins 搭建 UI 自动化测试实战

文章目录 效果展示Junit 5Junit 5 介绍Junit 5 与 Junit 4 对比PageFactory 模式编写自动化代码公共方法提取测试用例参数化Jenkins 搭建及配置参数化执行生成 Allure 报告Maven 常用命令介绍POM 文件效果展示 本 chat 介绍 UI 自动化测试框架的搭建: 运用 page factory 模式…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《基于V2G潜力模糊评估与移动储能协调调度的灾后供电恢复策略》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

第12章 软件测试基础(第三部分)测试类型、测试工具

七、测试类型&#xff08;按工程阶段划分&#xff09; 单集系确收 &#xff08;一&#xff09;单元测试 1、单元测试/模块测试 单元就是软件中最小单位&#xff08;或模块&#xff09;。可以是一个函数、一个过程、一个类。主要依据是模块的详细设计文档。价值在于尽早发现…

spring模块(六)spring监听器(1)ApplicationListener

一、介绍 1、简介 当某个事件触发的时候&#xff0c;就会执行的方法块。 当然&#xff0c;springboot很贴心地提供了一个 EventListener 注解来实现监听。 2、源码&#xff1a; package org.springframework.context;import java.util.EventListener; import java.util.fu…

游戏理解入门:Rust+Bracket开发一个小游戏

1. Game loop 使用game loop可以使得游戏运行更加流畅和顺滑&#xff0c;它可以&#xff1a; 初始化窗口、图形和其他资源&#xff1b;每当屏幕刷新他都会运行(通常是每秒30,60 )&#xff1b;每次通过循环&#xff0c;他都会调用游戏的tick()函数。 大致的原理流程如下&…

如何查看公网IP开放端口?

在计算机网络中&#xff0c;公网IP是指能够直接访问互联网的IP地址&#xff0c;而开放端口则是指外部网络可以访问的服务端口。查看公网IP开放端口可以帮助我们了解当前网络环境中哪些服务可以被外部网络访问&#xff0c;对于网络安全和远程连接非常重要。 天联组网 天联组网是…

【postgresql初级使用】小小索引大用途,奇妙的索引让大数据查询提升成百上千倍,多种索引类型的区别,你用对索引了吗?

索引介绍 ​专栏内容&#xff1a; postgresql使用入门基础手写数据库toadb并发编程 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 文章目录 索引介绍概述 …

2024蓝桥杯网络安全部分赛题wp

爬虫协议 题目给了提示访问robots.txt 会出三个目录 访问最后一个 点进去就flag{22560c15-577c-4c8b-9944-815473758bad} packet 下载附件&#xff0c;这个是流量包 放wireshark流量分析 搜http协议 发现有cat flag命令&#xff0c;直接看他返回的流量 最后base64解码即可…

Linux-笔记 i2c-tools

1、i2c-tools介绍 1、在日常linux开发中&#xff0c;有时候需要确认i2c硬件是否正常连接&#xff0c;设备是否正常工作&#xff0c;设备的地址是多少等等&#xff0c;这里我们就需要使用一个用于测试I2C总线的工具——i2c-tools&#xff0c;i2c-tools原理是通过操作/dev 路径 …

存储大作战:探索Local Storage与Session Storage的奥秘

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 存储大作战&#xff1a;探索Local Storage与Session Storage的奥秘 前言Local Storage与Session Storage简介数据存储生命周期容量限制安全性 前言 在Web的世界里&#xff0c;数据就像是一群流浪者&a…

TypeScript学习日志-第二十三天(装饰器Decorator)

装饰器Decorator 一、类装饰器 ClassDecorator 其中返回的 target 是 Http 的构造函数&#xff0c;有了构造函数就不会去破坏其自身原有的结构&#xff0c;当我们 Http 里面有多个属性或者方法的&#xff0c;当是我们不想看或者改变它&#xff0c;这时候可以在构造函数中增加即…

Ubuntu18.04 安装 anconda

anaconda官网 bash Anaconda3-2021.11-Linux-x86_64.sh一直回车&#xff0c;输入yes 选择安装目录 是否希望更新shell配置文件以自动初始化conda

组合数学汇总

阶乘、排列、组合 阶乘 x ! Π i : 1 x i x! \Pi_{i:1}^xi x!Πi:1x​i 。特殊情况0的阶乘是1。 排列 排列 P n m P_n^m Pnm​&#xff0c;从n个不同元素中取出m&#xff08;m≤n&#xff09;个元素&#xff0c;按照一定的顺序排成一列。第一个元素有n种选择&#xff0c;第…

AR人脸美妆SDK解决方案,让妆容更加贴合个人风格

美妆行业正迎来前所未有的变革&#xff0c;为满足企业对高效、精准、创新的美妆技术需求&#xff0c;美摄科技倾力打造了一款企业级AR人脸美妆SDK解决方案&#xff0c;为企业打开美妆领域的新世界大门。 革命性的人脸美妆技术 美摄科技的AR人脸美妆SDK解决方案&#xff0c;不…

TS学习-抽象类和静态成员

目录 1&#xff0c;抽象类1&#xff0c;为什么需要抽象类2&#xff0c;抽象成员3&#xff0c;设计模式-模板模式 2&#xff0c;静态成员1&#xff0c;什么是静态成员2&#xff0c;设计模式-单例模式 1&#xff0c;抽象类 1&#xff0c;为什么需要抽象类 有时&#xff0c;某个…

IDEA设置 | 个性化设置

文章目录 IDEA设置总结IDEA自动生成序列化ID IDEA设置总结 本篇博客将专注于整理IDEA新UI界面的相关设置 IDEA自动生成序列化ID CtrlAltS快捷键打开设置界面 选择Editor→Inspections→JVM languages→Test frameworks&#xff0c;勾选上Serializable class without serialVe…

Android中Fragment失去焦点的场景

在Android开发中&#xff0c;Fragment的生命周期方法onPause()会在以下几种情况下被调用&#xff1a; 当Fragment所在的Activity开始与其他Activity进行交互时&#xff0c;例如按下Home键或其他Activity获得焦点&#xff0c;导致当前Activity失去焦点&#xff0c;从而使得所有关…

SpringCloud微服务之Eureka、Ribbon、Nacos详解

SpringCloud微服务之Eureka、Ribbon、Nacos详解 1、认识微服务1.1、单体架构1.2、分布式架构1.3、微服务1.4、SpringCloud 2、服务拆分与远程调用2.1、服务拆分的原则2.2、服务拆分示例2.2、提供者与消费者 3、Eureka注册中心3.1、Eureka的结构和作用3.2、搭建eureka-server3.2…

学习Uni-app开发小程序Day4

今天是学习的第四天&#xff0c;老师的视频开始穿插讲解vue的知识&#xff0c;对身为小白的我还是很友好的。vue3的模版语法插值表达式 在根据视频学习的过程中&#xff0c;也对vue有一个回顾&#xff0c;但是出现一种情况&#xff0c;在script中声名一个值&#xff0c;在templ…

《构建高效审批系统:架构设计与实践》

在现代企业管理中&#xff0c;审批系统扮演着至关重要的角色&#xff0c;它不仅能够规范业务流程&#xff0c;提高工作效率&#xff0c;还能够增强企业的管理控制力和信息化水平。本文将探讨如何设计和构建一套高效的审批系统架构&#xff0c;以满足企业日常审批需求&#xff0…