1.25号c++

1.引用

引用就是给变量起别名

格式:

数据类型 &引用名 = 同类型的变量名 (& 引用符号)

eg: int a = 10; int &b = a;     //b引用a,或者给a变量取个别名叫b

    int *p;  //指针可以先定义 后指向
    p = &a;
    
    //int &bb; 引用必须定义的同时初始化 指定目标
    //bb = b;
    
    p = &b;
    
    //int &aa = b; 引用一旦指向目标,就不可以改变了

数组的引用

给数组起别名

    int a[5] = {1,2,3,4,5};

    //数组指针
    int (*p)[5] = &a;

    //数组引用
    int (&b)[5] = a;

    cout << a[3] << endl;
    cout << b[3] << endl; // b[3] == a[3]

    b[4] = 99;
    cout << a[4] << endl;

函数的引用

给函数起别名

int max(int x, int y)

{ return x>y?x:y; }

//函数引用

int (&fun)(int, int) = max;

cout << fun(6,8) << endl;

// fun(6,8) == max(6, 8)

结构体中有引用成员

当结构体中有引用成员的时候,使用该结构体类型定义变量时,必须定义的时候初始化,否则报错。

struct student

{         int &id;

          string name;

};

int num=1;

struct student stu={num,"张三"};//当结构体有引用成员时,必须定义的时候初始化

当引用作为函数的返回值

要求返回的变量的生命周期要长

静态局部变量或者堆区申请的变量

int &fun() // int &num = num
{
    static int num = 10;
    return num;
}


int main()
{
    int a;


    a = fun(); // a = num
    cout << a << endl;

传值、传址、传引用(重点)

传值一定不会改变目标的值。

传址可能会,可能不会。

传引用可能会,可能不会。

void fun(int a, int b) //int a = a
{
    a++;
    b++;
}
void fun2(int *a, int *b)//int *a = &a
{
    *a++;
    *b++;
}
void fun3(int &a, int &b)// int &a = a
{
    int c = a;
}
int main()
{
    int a = 10, b = 20;
    fun(a,b);//值传递
    cout << "main: a = " << a << " b = " << b << endl;

    fun2(&a, &b);//址传递
    cout << "main: a = " << a << " b = " << b << endl;

    fun3(a,b);//引用传递
    cout << "main: a = " << a << " b = " << b << endl;

指针与引用的区别(重点)

指针:存放地址变量。

引用:变量的别名。

1.指针可以先定义后指向,引用必须定义的时候同时初始化。

2.指针后期可以改变指向,引用一旦指定目标就无法改变。

3.指针要申请空间存放指针变量的地址,引用不需要。

4.有指针数组没有引用数组(引用不是数据类型)。

5.有二级指针没有二级引用(引用不是数据类型)。

2.const

修饰变量时,表示该变量是常变量,其值不能被修改

int a = 10;
int const b = 20; // const int b = 20  
int *pa = &a; //合法
int *pb = &b; //不合法
int const *pbb = &b; //可以  (int cosnt * const p)

int a = 10;
int const b = 20;
int &ppa = a; //合法
int &ppb = b; //不合法
int const &pppb = b; //合法  int const &pppb ---->常引用

3.函数重载

c++中,在同一作用域下,两个以上函数,取相同函数名,其形参的个数或者类型不同,编译器会根据实参的类型或个数,自动调用相应函数,这就是函数重载。

注意:不以返回值作为标准

默认参数的函数定义和使用


void fun(string name = "zhangsan")
{
    cout << name << endl;
}

哑元(了解)

定义函数的时候,只定义类型,不定义形参名,在函数中也不使用。

作用:没有作用,占位

内联函数

内联函数就是在函数定义前 加 inline 关键字。

要求:

1> 内联函数体积要小

2> 一般代码不超过5行

3> 不能有复杂的语句,比如循环,递归

作用:提高代码的运行效率

内联函数和带参宏替换的区别:

1> 内联函数是函数调用,带参宏替换是替换

2> 内联函数是在编译的时候展开,带参宏替换是在预处理展开。

4.C++中的结构体

1> C语言中的结构体在C++中依然适用。

2> C++中的结构体可以有函数,而C语言不可以。

3> C++中的结构体可以给变量赋初始值,而C语言中不可以。

4> C++中的结构体在定义结构体变量时,可以省略关键字struct不写,而C语言中不可以。

5> C++中的结构体中有访问权限,而C语言中的结构体没有访问权限。

6> C++中的结构体有特殊的成员函数,而C语言中的结构体没有。

7> C++中的结构体存在继承,而C语言中的结构体没有继承。

C++中的结构名一般首字母大写。

C++结构体的默认访问权限是共有的,--->public

访问权限:private: 私有权限 protected:保护权限 public:共有权限

5.类

一般又有变量又有函数的构造数据类型,用类来完成,C++中的类是由C++中的结构体演变而来,只是默认访问权限和默认继承方式以及关键字不同。

默认访问权限: private 私有的

默认继承方式:private 私有的

关键字:class

类内都可以成为成员,成员可以分为数据成员、成员函数

格式

class 类名

{

 public:

        公共的数据成员、成员函数

protected:

        受保护的数据成员、成员函数

private:

        私有的数据成员、成员函数

};

访问权限的介绍

public: 该权限是公共权限,表示该权限下的属性(变量)、方法(函数),可以在类内、子类、类外被访问。

protected: 该权限是受保护权限,表该权限下的属性(变量)、方法(函数),可以在类内、子类被访问,类外不可以被访问。

private: 该权限是私有权限,表示该权限下的属性(变量)、方法(函数),只能在类内被访问,子类、类外不可以被访问。

封装

类的三大属性:封装、继承、多态

封装就是将数据和对数据的处理捆绑在一起的过程,称为封装。

属性(变量)+ 方法(函数)

当成员函数形参名和数据成员同名时

表明数据成员属于哪个类的,即加上类名和作用域限定符

this指针

1> 类里的每个非静态成员函数,都有隐藏了一个this指针形参

2> this指针,谁使用我,我就指向谁

3> this指针的原型

eg:

Stu * const this

类外定义成员函数

1> 在类内声明函数

2> 在类外定义成员函数的实现,需要表名改函数属于哪个类的,即加上类名和作用域限定符。

作业

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

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

相关文章

解析Go语言中HTTP代理的请求和响应过程

在Go语言中&#xff0c;构建一个HTTP代理服务器其实非常简单。那么&#xff0c;当你发送一个请求给代理服务器时&#xff0c;代理服务器到底做了哪些事情呢&#xff1f; 首先&#xff0c;当你向代理服务器发送一个HTTP请求时&#xff0c;代理服务器会先接收到这个请求。这个请…

YOLOv8训练自己的数据集,通过LabelImg

记录下labelImg标注数据到YOLOv8训练的过程,其中容易遇到labelImg的坑 数据集处理 首先在mydata下创建4个文件夹 images文件夹下存放着所有的图片&#xff0c;包括训练集和测试集等。后续会根据代码进行划分。 json文件夹里存放的是labelImg标注的所有数据。需要注意的是&…

【代码随想录-数组】长度最小的子数组

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

Redis-持久机制

文章目录 为什么有持久化什么是持久化RDB文件创建SAVEBGSAVE 文件载入 优缺点 AOF日志步骤 对比数据恢复 总结 Redis是一个开源的内存数据结构存储系统&#xff0c;被广泛应用于Web应用中&#xff0c;可以用作数据库和缓存服务器。它具有高性能、高并发、高可用性等特点&#x…

ORB-SLAM中的RANSAC算法解析

RANSAC算法解析 RANSAC是一种在具有噪声的模型中去估计最优的一个算法&#xff0c;其核心思想是采用不断迭代的方法去选择一组全是内点的集合&#xff0c;并采用该集合进行模型估计的一种方法&#xff0c;可以提高模型估计的鲁棒性。 假设目前有 K K K组采集到的数据&#xff…

2024年人工智能产业十大发展趋势

2024年人工智能产业十大发展趋势 技术变革1. 多模态预训练大模型将是人工智能产业的标配2. 高质量数据愈发稀缺将倒逼数据智能飞跃3. 智能算力无处不在的计算新范式加速实现 应用创新4. 人工智能生成内容&#xff08;AIGC&#xff09;应用向全场景渗透5. 人工智能驱动科学研究&…

仅使用 Python 创建的 Web 应用程序(前端版本)第07章_商品列表

在本章中,我们将实现一个产品列表页面。 完成后的图像如下 创建过程与User相同,流程如下。 No分类内容1Model创建继承BaseDataModel的数据类Item2MockDB创建产品表并生成/添加虚拟数据3Service创建一个 ItemAPIClient4Page定义PageId并创建继承自BasePage的页面类5Applicati…

ElasticSearch7.7.1集群搭建

前言 Elasticsearch&#xff08;ES&#xff09;是一个基于Apache Lucene的分布式、高扩展、近实时的搜索引擎&#xff0c;主要用于海量数据快速存储、实时检索、高效分析的场景。通过简单易用的RESTful API&#xff0c;Elasticsearch隐藏了Lucene的复杂性&#xff0c;使得全文搜…

DDT数据驱动测试

简单介绍 ​ DDT&#xff08;Date Driver Test&#xff09;&#xff0c;所谓数据驱动测试&#xff0c; 简单来说就是由数据的改变从而驱动自动化测试的执行&#xff0c;最终引起测试结果的改变。通过使用数据驱动测试的方法&#xff0c;可以在需要验证多组数据测试场景中&…

齐俊元或转岗至Flow,童遥升任飞书产品负责人;霍启刚赴天津履职 ;广州放开120平方米以上住房限购

今日精选 • 齐俊元或转岗至Flow&#xff0c;童遥升任飞书产品负责人• 霍启刚赴天津履职• 广州放开120平方米以上住房限购 科技动态 • 年轻人的第一个多模态大模型: Vary-toy ,模型大小不到2B,代码和模型均已开源&#xff0c;并有在线demo可试玩。 地址&#xff1a; htt…

Topaz Video AI:无损放大,让你的视频更清晰!

在当今的数字时代&#xff0c;视频内容的重要性越来越受到人们的关注。无论是在社交媒体上分享生活片段&#xff0c;还是在商业领域中制作宣传视频&#xff0c;人们都希望能够展现出更高质量的视频内容。 然而&#xff0c;由于各种原因&#xff0c;我们经常会面临一个问题&…

网络基础---初识网络

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、局域网…