初始C++(类与对象)

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

个人主页: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.mzph.cn/news/877737.shtml

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

相关文章

Aixos食用指南,超全面详细讲解!

前言&#xff1a;axios是目前最流行的ajax封装库之一&#xff0c;用于很方便地实现ajax请求的发送。特意花费了两个小时为大家准备了一份全面详细的Aixos食用指南&#xff0c;需要的小伙伴点个关注 哦~&#x1f495; &#x1f308;&#x1f308;文章目录 Axios 简介 Axios 特…

vue实现卡片遮罩层交互式功能

前言 在前端开发中&#xff0c;卡片遮罩层是一种常见的交互设计元素&#xff0c;用于强调某个区域或内容&#xff0c;并提供用户操作的入口。本文将带大家在 vue 中结合实际案例实现此功能。 实现效果 完整代码 html <template><!-- 主容器 --><div class&quo…

ctfshow WEB刷题

web1 直接右键打开&#xff0c;在源代码里 web2 ctrlu查看源码 web3 打开bp抓包发送直接就得到了 web4 用dirsearch扫描发现txt文件 访问 接着访问得到flag web5 用dirbuster扫描看看有没有phps源码泄露&#xff0c;发现存在 访问下载文件打开就是flag web6 用dirsearch扫…

ES6笔记总结(Xmind格式):第三天

Xmind鸟瞰图&#xff1a; 简单文字总结&#xff1a; ES6知识总结&#xff1a; Promise的使用: 1.使用 new Promise() 构造函数来创建一个 promise 对象 2.接受两个函数作为参数&#xff1a;resolve 和 reject ①resolve 函数在异步操作成功完成时调用&#xf…

python构建一个web程序

from flask import Flaskapp Flask(__name__)app.route(/) def hello_world():return 欢迎来到我的Python Web程序!if __name__ __main__:app.run(debugTrue)1、安装flask D:\Users\USER\PycharmProjects\pythonProject1\p01>pip install flask WARNING: Ignoring invalid…

服务器五大关键组件拆解分析

拆解服务器五大关键组件 "AI服务器五大硬件揭秘&#xff1a;深入剖析PCB构造&#xff0c;揭示内部真实面貌。本文通过一步步拆解PCB,为读者呈现了一台服务器的内部世界&#xff0c;力求让您对服务器升级的潜在价值有更深的理解和把握。" 1、五大硬件部分可归纳为——…

自定义开屏启动广告页

自定义开屏启动广告页 文章目录 自定义开屏启动广告页效果图简单版轮播方式css 效果图 简单版 图片 倒计时 <template><view class"guide fcc" :style"{ background: url(${ imgUrl }) no-repeat}"><view class"skip_btn" cli…

黑神话悟空,高清壁纸、原画,游戏截图

黑神话悟空&#xff0c;高清壁纸、原画&#xff0c;游戏截图&#xff1a; 链接&#xff1a;https://pan.quark.cn/s/cd17c05c4f33

c++每日练习记录4-(递归思想)

题解1迭代&#xff1a; 利用利用两个新的指针&#xff0c;一个用于保存输出的初始节点&#xff0c;另外一个用于地址的迭代指向。 ListNode *mergeTwoLists(ListNode *list1, ListNode *list2){ListNode *list_node new ListNode(0);ListNode *list_node1 list_node;while (l…

springboot中后缀匹配模式useSuffixPatternMatch、useTrailingSlashMatch的源码匹配分析

背景&#xff1a; 上篇文章&#xff0c;已经说了&#xff0c;如果我们直接debug调试没法找到源码中具体的代码&#xff0c;那么就可以通过jd-gui反编译的方式通过搜关键词的方式来找到源码中具体的位置&#xff0c;这次简单说下spring中的两种后缀匹配模式useSuffixPatternMat…

进外包,对简历是否有影响?

hello 大家好 今天来跟大家聊聊外包&#xff0c;主要是最近很多朋友私信问我&#xff0c;去外包公司会不会去自己的简历产生影响。 外包类型 我们先来聊聊外包类型&#xff1b;第一种类型&#xff0c;人头外包&#xff0c;也就是你入职的公司是没有开发岗位&#xff0c;只是把你…

机器人学——逆向运动学(机械臂)

正/逆运动学对比 求解 求解目标 Reachable workspace 与 Dexterous workspace Subspace 解的数目 多重解 解的选择 求解方法 栗子一 x,y,fai已知&#xff0c;求解theta(1,2,3)的具体数值 几何法 余弦定理定义&#xff1a;对于任意三角形ABC&#xff0c;设其三个内角分别为…

设计模式---简单工厂模式

简单工厂模式&#xff08;Simple Factory Pattern&#xff09; 是一种创建型设计模式&#xff0c;它定义了一个工厂类&#xff0c;通过这个工厂类可以创建不同类型的对象。简单工厂模式的主要目的是将对象的创建逻辑集中在一个地方&#xff0c;简化客户端的代码&#xff0c;使得…

黑神话 悟空 配置 Mac玩游戏

兄弟们&#xff0c;这次《黑神话&#xff1a;悟空》真的是全网吹爆了&#xff01;我提前开香槟拿个年度游戏好吧&#xff01;Mac玩家也不用担心&#xff0c;系统兼容工具CrossOver也在第一时间支持了《黑神话&#xff1a;悟空》&#xff0c;现在你可以直接在Mac上玩《黑神话&am…

World of Warcraft [CLASSIC] the Eye of Eternity [EOE] P1-P2

World of Warcraft [CLASSIC] the Eye of Eternity [EOE] 永恒之眼&#xff08;蓝龙&#xff09; 第一阶段 第二阶段 第三阶段 载具1-6技能介绍 World of Warcraft [CLASSIC] the Eye of Eternity [EOE]_永恒之眼 eoe-CSDN博客 永恒之眼怎么出副本呢&#xff0c;战斗结束&am…

嵌入式学习----网络通信之TCP协议通信

TCP&#xff08;即传输控制协议&#xff09;&#xff1a;是一种面向连接的传输层协议&#xff0c;它能提供高可靠性通信(即数 据无误、数据无丢失、数据无失序、数据无重复到达的通信) 适用情况&#xff1a; 1. 适合于对传输质量要求较高&#xff0c;以及传输大量数据 的通信。…

【Kubernetes】k8s集群图形化管理工具之rancher

目录 一.Rancher概述 1.Rancher简介 2.Rancher与k8s的关系及区别 3.Rancher具有的优势 二.Rancher的安装部署 1.实验准备 2.安装 rancher 3.rancher的浏览器使用 一.Rancher概述 1.Rancher简介 Rancher 是一个开源的企业级多集群 Kubernetes 管理平台&#xff0c;实…

ES+FileBeat+Kibana日志采集搭建体验

1.环境准备 需要linux操作系统&#xff0c;并安装了docker环境 此处使用虚拟机演示。&#xff08;虚拟机和docker看参考我之前写的文章&#xff09; VirtualBox安装Oracle Linux 7.9全流程-CSDN博客 VirtualBox上的Oracle Linux虚拟机安装Docker全流程-CSDN博客 简单演示搭建ES…

SpringBoot教程(二十二) | SpringBoot实现分布式定时任务之elastic-job

SpringBoot教程&#xff08;二十二&#xff09; | SpringBoot实现分布式定时任务之elastic-job 简介前置条件&#xff1a;需要ZooKeeper配合1、引入相关依赖2、application.yml中配置注册中心和作业调度巨坑&#xff08;配置修改无效&#xff09;3、job实例4、ElasticJob-UI监控…

git-20240822

目录 初始化仓库 Git init Git init project --bare 查看提交的记录 git log --prettyoneline 查看当前git远程库地址 git remote -v 查看详细提交记录 git log 撤出暂存区的文件 git reset HEAD file(.代表全部文件&#xff09; 提交数据到远程仓库 git config --global push.…