初始C++

devtools/2024/10/18 20:21:03/

 感谢大佬的光临各位,希望和大家一起进步,望得到你的三连,互三支持,一起进步

个人主页:LaNzikinh-CSDN博客

文章目录

  • 前言
  • 一.引用
  • 二.内联函数
  • 三.类和对象
  • 总结

前言

之前讲c++的命令空间和第一个程序的运行,继续讲解一下c++的语法,然后开始进入类和对象的学习


一.引用

引用变量,是c++区别与c语言的语法,引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。

引用:可以看作一个已定义变量的别名

引用变量的创建

Type&name=var;

int main()
{int a = 10;int& b = a;cout << b << endl;return 0;
}

意思就是说初始化了一个A的变量,在创建一个引用变量B,然后把A赋给B,那我现在操控B就是在操控A

但是引用在使用的时候还远一些注意的事项

注意:

1.&不是取地址,而是起标识作用

2.必须在声明引用变量时进行初始化

3.引用初始化之后,不能再引用其他的变量了

4.不能有NULL引用

引用变量的本质

有人会说引用到底是什么东西,为什么可以这样赋值,引用到底有什么用?

引用的本质:是一个常量指针,引用所占用空间大小与指针相同

int main()
{int b = 0;int& a = b;//==int *const a=&b;a = 20;//*a=20;return 0;
}

引用作为函数的参数(不需要进行初始化)

引用的作用比较经典的就是可以作为函数的参数

typedef struct Teacher
{int age;
}Te;
void Print(Te& t)
{t.age=32;
}
int main()
{Te t;t.age = 30;Print(t);cout<<t.age<<endl;return 0;
}

这是一个很经典的代码,你们先思考一下之后打印出来的纸是30还是32?这个也完全验证了应用的本质到底是什么

我用的是.直接访问了这个函数的值,为什么会改变?出了这个函数不是应该会被销毁吗?

上面的代码把他转化一下,引用的本质:是一个常量指针

typedef struct Teacher
{int age;
}Te;
void Print(Te*const t) 
{t->age = 32;
}
int main()
{Te t;t.age = 30;Print(&t);cout << t.age << endl;return 0;
}

二.内联函数

定义:

内联函数本身也是一个真正的函数,唯一不同之处在于会在适当的地方向预处理宏一样展开,所以不需要函数调用开销

创建

内联函数:在普通函数之前加上inline关键字

inline int fun(int a)
{return a++;
}

作用

以前我们写过一个宏函数的对比,如果进行一些简单的函数实现的话,就不用纠结使用宏还是函数的,直接用内联函数就可以了

注意:

1.内联函数的声明和定义要在一起

2.注意事项以下情况不会将函数进行内联编译

3.存在任何循环语句

4.存在过多的条件,判断语句

5.对函数取地址(内联函数没有函数的调用开销,取地址必然错误)

6.函数体过于庞大

默认参数

在c++的语法中,是有一个默认参数的功能,就是说你函数传递参数的时候可以只传一个或者少传几个,但是前提是你得把默认的参数写好,顺序不可出错,不然还是不行

//默认参数
float func(int r, float pi = 3.14)
{return pi * r * r;
}
int main()
{float r=func(10);//可以只传一个数cout << r << endl;
}

如果是这样就不可以

float func(int r=3, float pi )
{return pi * r * r;
}
int main()
{float r=func(10);//可以只传一个数cout << r << endl;
}

函数重载

函数重载:1.用同一个函数名定义的不同函数2.当函数名和不同参数的搭配。

条件:同一个作用与参数个数不同,参数类型不同,参数的顺序不同

#include<iostream>
using namespace std;
void func()
{cout << "func()"<< endl;}
void func(int a)
{cout <<a<< endl;
}
void func(int a,double b)
{cout <<a<<b<< endl;
}
void func(double a,int b)
{cout <<a<<b<< endl;
}
int main()
{func();func(1);func(1, 1.2);func(1.2, 1);return 0;
}

三.类和对象

C和C++他们两个语言得很重要的区别,就是一个是面对过程的编程,一个是面对对象的编程,所以我们这次才简单地了解一下对象和类

类的定义与访问

class nameA
{
public://访问控制符  private pretected//成员变量//属性//成员函数//方法
};

例子,创建一个动物类

class animal
{
public:char name[32];int age;void jiao(const char* voice){//内部namecout<<name<< voice<<endl;}
};

对象的实例化

有3种

实例化普通对象,用数组实例化多个对象,定义一个指针对象

//对象的实例化
animal cat;
animal cat[10];
animal* cat;

类成员的访问控制

private----私有(只能在类的内部访问)要修改需要通过内部来改,public------公有(在类的内外部都可访问),protected------保护(只能在类的内部访问)

内部外部是什么??

class animal
{
public:char name[32];int age;void jiao(const char* voice){//内部namecout<<name<< voice<<endl;}
};
int main()
{//对象的实例化animal cat;cat.age = 1;//外部cat.jiao("xia");return 0;
}

例题

如果要改变被private里面的对象改怎么办?

思路:要修改需要通过内部来改

 class animal
{
public:char name[32];void set_age(int age){_age = age;}int get_age(){return _age;}
private:int _age;
};
int main()
{	animal cat;cat.set_age(1);//外部int a = cat.get_age();cout << a << endl;return 0;
}


总结

这次我们讲解了C++的语法引用,内联函数,类和对象等下次就要正式进入C++的类和对象了,这次大改的了解了一下,下次就要真正的感受到面对对象编程的魅力了


http://www.ppmy.cn/devtools/45250.html

相关文章

改进rust代码的35种具体方法-类型(二十)-避免过度优化的诱惑

上一篇文章-改进rust代码的35种具体方法-类型(十九)-避免使用反射 “仅仅因为Rust允许您安全地编写超酷的非分配零复制算法&#xff0c;并不意味着您编写的每个算法都应该是超级酷的、零复制和非分配的。”-trentj 这本书中的大多数项目都旨在帮助现有程序员熟悉Rust及其成语。…

网络协议学习笔记

HTTP协议 简单介绍 HTTP属于应用层 HTTP可以简单的理解成类似json一样的文本封装&#xff0c;但是这是超文本&#xff0c;所以可以封装的不止有文本&#xff0c;还有音视频、图片等 请求方法 HTTP报文格式 三大部分 起始行&#xff1a;描述请求或响应的基本信息头部字段…

Sqoop与Shell脚本数据迁移实战

文章目录 前言一、sqoop实战示例1. 获取所有数据库2. 获取指定数据库的所有表3. 查询数据4. 把指定数据库的所有表导入指定hive数据库5. 把指定表导入hive数据库的指定表6. 查询数据导入到指定表 二、shell脚本实战示例1. shell脚本2. 解释 总结 前言 在数据驱动的时代&#x…

前端经典手写面试题---节流防抖

防抖 定义: n 秒后在执行该事件&#xff0c;若在 n 秒内被重复触发&#xff0c;则重新计时。 场景: 搜索框搜索输入。只需用户最后一次输入完&#xff0c;再发送请求手机号、邮箱验证输入检测窗口大小resize。只需窗口调整完成后&#xff0c;计算窗口大小。防止重复渲染。 实…

国内类似ChatGPT的大模型应用有哪些?发展情况如何了

第一部分&#xff1a;几个容易混淆的概念 很多人&#xff0c;包括很多粉丝的科技博主&#xff0c;经常把ChatGPT和预训练大模型混为一谈&#xff0c;因此有必要先做一个澄清。预训练大语言模型属于预训练大模型的一类&#xff0c;而ChatGPT、文心一言又是预训练大语言模型的一个…

如何使用 Apache 和 Nginx 创建临时和永久重定向

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 HTTP 重定向,或者 URL 重定向,是一种将一个域名或地址指向另一个的技术。重定向有许多用途,也有几种不同的重定向方式需要考虑。当一个站点需要将请求一个地址…

nginx的安装002

之前001讲述了nginxyum安装现在讲一下nginx如何本地离线安装 操作系统&#xff1a; CentOS Stream 9 操作步骤&#xff1a; 首先访问nginx官网&#xff0c;下载。 用wget命令下载&#xff0c; [rootlocalhost ~]# wget -c https://nginx.org/download/nginx-1.26.0.tar.gz …

React Hooks是如何保存的

React 函数式组件是没有状态的&#xff0c;需要 Hooks 进行状态的存储&#xff0c;那么状态是怎么存储的呢&#xff1f;Hooks是保存在 Fiber 树上的&#xff0c;多个状态是通过链表保存&#xff0c;本文将通过源代码分析 Hooks 的存储位置。 创建组件 首先我们在组件中添加两…