初始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)
	{
		//内部name
		cout<<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)
	{
		//内部name
		cout<<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++的类和对象了,这次大改的了解了一下,下次就要真正的感受到面对对象编程的魅力了

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

adb shell service命令与SurfaceFlinger调试

“ 在Android上有丰富的shell命令便于开发者用来调试程序&#xff0c;非常方便&#xff0c;本文简单说明下service命令的用法。” 01 基本用法 首先看一下使用说明&#xff0c;带上参数-h 或 -&#xff1f; $ adb shell service -h Usage: service [-h|-?]service listservi…

STM32 MDK Keil5软件调试功能使用(无需连接硬件)

MDK Keil5 在线仿真STM32&#xff08;无需连接硬件&#xff09; 首先点击工具栏的魔术棒配置一下&#xff1a;&#xff08;记得选择自己的STM32芯片类型&#xff09; 开启调试 使用逻辑分析仪查看IO输出 会打开这个界面&#xff0c;点击左边的setup按钮 会打开这个窗口&am…

交易量突破 3000 亿美元,去中心化衍生品协议 APX Finance 成最大的黑马?

“APX Finance 总交易量现已突破 3000 亿美元&#xff0c;已然成为链上衍生品赛道的主力军” 自 2021 年链上衍生品市场进入萌芽期以来&#xff0c;该板块始终保持着较高的市场增速&#xff0c;即便如此该领域仍旧存在极大的发展空间。一方面&#xff0c;衍生品板块交易量目前占…

【Kubernetes】k8s集群的污点、容忍、驱逐 以及排障思路

污点和容忍以及驱逐 一、污点&#xff08;Taint&#xff09; 污点介绍 节点亲和性&#xff0c;是Pod的一种属性&#xff08;偏好或硬性要求&#xff09;&#xff0c;它使Pod被吸引到一类特定的节点。Taint 则相反&#xff0c;它使节点能够排斥一类特定的 Pod。 Taint 和 Tol…

Docker 常用命令以及镜像选择

前言-与正文无关 生活远不止眼前的苦劳与奔波&#xff0c;它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中&#xff0c;我们往往容易陷入工作的漩涡&#xff0c;忘记了停下脚步&#xff0c;感受周围的世界。让我们一起提醒自己&#xff0c;要适时放慢脚步…

PS系统教程12

画笔模式-绘画模式 相反组&#xff1a;理解一组即可 叠加、柔光重点理解&#xff0c;后面只是细微的差别差值-排除相当于胶卷留下的底片那样的效果。 正常和溶解的对比 正常-背后 效果&#xff1a;重叠的部分在就图层后面。 清楚与橡皮擦一样。 变暗 原理&#xff1a;比这个…

数学建模笔记

数学建模 定义角度 数学模型是针对参照某种事物系统的特征或数量依存关系&#xff0c;采用数学语言&#xff0c;概括地或近似地表述出的一种数学结构&#xff0c;这种数学结构是借助于数学符号刻画出来的某种系统的纯关系结构。从广义理解&#xff0c;数学模型包括数学中的各…

Linux系统之mv命令的基本使用

Linux系统之mv命令的基本使用 一、mv命令介绍1. mv命令简介2. mv命令的使用结果 二、mv命令的使用帮助1. 在命令行的帮助信息2. mv常用选项 三、mv命令的基本使用1. 创建源目录和目标目录2. 新建测试文件3. 将源目录文件复制到目标目录4. 将文件进行改名5. 将目录的所有文件转移…

Windows下使用Airsim+QGC进行PX4硬件在环HITL(三)

Windows下使用AirsimQGC进行PX4硬件在环HITL This tutorial will guide you through the installation of Airsim and QGC on Windows, so that the hardware-in-the-loop experiment can be conducted. Hardware-in-the-Loop (HITL or HIL) is a simulation mode in which nor…

功效系数法

功效系数法&#xff08;Efficacy Coefficient Method&#xff09;是一种综合评价方法&#xff0c;它根据多目标规划的原理&#xff0c;对每个评价指标确定一个满意值和不允许值&#xff0c;以满意值为上限&#xff0c;以不允许值为下限。计算各指标实现满意值的程度&#xff0c…

以太网扫盲(四)phy驱动link up流程分析

1. 简介 在调试网口驱动的过程中发现phy芯片的驱动框架结构还有点复杂&#xff0c;不仔细研究的话还不好搞懂&#xff0c;另外百度到的资料也不够全面&#xff0c;这篇就总结梳理一下这方面的知识。 我们知道一个 phy 驱动的原理是非常简单的&#xff0c;一般流程如下&#x…

AI视频教程下载:给初学者的ChatGPT提示词技巧

你是否厌倦了花费数小时在可以通过强大的语言模型自动化的琐碎任务上&#xff1f;你是否准备好利用 ChatGPT——世界上最先进的语言模型——并将你的生产力提升到下一个水平&#xff1f; ChatGPT 是语言处理领域的游戏规则改变者&#xff0c;它能够理解并响应自然语言&#xf…

[笔记] 记录docker-compose使用和Harbor的部署过程

容器技术 第三章 记录docker-compose使用和Harbor的部署过程 容器技术记录docker-compose使用和Harbor的部署过程Harborhttps方式部署&#xff1a;测试环境部署使用自签名SSL证书https方式部署&#xff1a;正式环境部署使用企业颁发的SSL证书给Docker守护进程添加Harbor的SSL证…

C++面向对象-继承,多态,重载

目录 零. 简介 一. 继承 1.基类,派生类 2.访问控制和继承: 3.多继承 二. 多态 关键字 virtual override : 用例:工厂模式 三. 重载 函数重载: 操作符重载: 零. 简介 继承&#xff1a;允许一个类从另一个类获取属性和方法。子类可以继承父类的特性&#xff0c;并可以…

python11 序列的相关操作

枚举遍历 序列的相关操作 text "hello,python" # in 判断字符是否在序列中&#xff0c;存在返回true,否则返回false print(p是否存在:,(p in text)) print(a是否存在:,(a in text)) # not in 判断字符不在序列中&#xff0c;不存在返回true,否则返回false print(p不…

代码随想录——二叉搜索树的最近公共祖先(Leetcode235)

题目链接 普通递归法 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val x; }* }*/class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode…

python猴子补丁Monkey Patching

猴子补丁&#xff08;Monkey Patching&#xff09;是一种动态修改或扩展代码行为的技术。具体来说&#xff0c;它是在运行时改变或扩展模块、类或函数的行为&#xff0c;而不需要修改源代码本身。这在某些情况下非常有用&#xff0c;比如&#xff1a; 修复第三方库中的bug&…

MySQL中所有常见知识点汇总

存储引擎 这一张是关于整个存储引擎的汇总知识了。 MySQL体系结构 这里是MySQL的体系结构图&#xff1a; 一般将MySQL分为server层和存储引擎两个部分。 其实MySQL体系结构主要分为下面这几个部分&#xff1a; 连接器&#xff1a;负责跟客户端建立连 接、获取权限、维持和管理…

C++高级 - 接口模板

目录 一. 接口 二. 模板 一. 接口 接口通常是通过抽象类或纯虚函数来实现的。 以下是一个使用抽象类来定义接口的示例代码&#xff1a; #include <iostream>class Interface { public:virtual void operation() 0; // 纯虚函数定义接口 };class ConcreteClass : pu…