当前位置: 首页 > ai >正文

0830 C++引用const函数重载结构体类

Part.1 梳理思维导图

一.引用

        1.概念

引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样

        2.格式

数据类型 &引用名 = 同类型需要引用的变量名;

int a = 10;
int &b = a; 

        3.数组引用

#include <iostream>using namespace std;int main()
{int c[5] = {10,20,30,40,50};int (*q)[5] = &c;//指针int (&d)[5] = c;//引用return 0;
}

        4. 函数引用  

#include <iostream>using namespace std;int max(int a,int b)
{return a>b?a:b;
}int main()
{int (*q)(int,int) = max;//指针int (&a)(int,int) = max;//引用return 0;
}

        5.结构体中引用成员

当结构体中有引用成员时,在定义结构体变量时,就必须初始化

#include <iostream>using namespace std;struct student
{string name;int age;double &score;
};int main()
{double score = 99;struct student stu1 = {"lisi",18,s}; //初始化return 0;
}

        6.传值,传地址,传引用

1.在主函数往函数中传变量的值,函数改变值不会让主函数中的变量改变

2.在主函数往函数中传变量的地址,函数改变值会让主函数中的变量改变,但是得看代码设计

3.在主函数往函数中传变量的引用,函数改变值会让主函数中的变量改变,但是得看代码设计

        7.引用作为函数返回

作为返回时,必须确保函数内的变量生命周期足够长

#include <iostream>using namespace std;int &out()
{static int num = 100;return num;
};int main()
{int a = fun();cout << a << endl;return 0;
}

        8.引用和指针的区别

1.引用是给变量取别名        指针是一个变量存储变量的地址

2.引用不是数据类型        指针是构造数据类型(有二级指针而没有二级引用)

3.引用不需要空间        指针需要空间

二.const

1.const 修饰的变量,只读变量,也称为常变量。

2.const修饰的局部变量在栈区,const修饰的全局变量在静态区,.ro段

3.const修饰的变量必须定义的同时初始化。

4.const int &bb = b //引用一个常变量b

三.函数重载

        1.概念

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

        2.例子

#include <iostream>using namespace std;int sum(int a,int b)
{return a+b;
}double sum(double a,double b)
{return a+b;
}char sum(char a,char b)
{return a+b;
}string sum(string a,string b)
{return a+b;
}int main()
{cout << sum(2,3) << endl;cout << sum(1.23,2.34) << endl;cout << sum('1','2') << endl;cout << sum("hello","world") << endl;return 0;
}

        3.带有默认参数的函数定义和使用

没有定义带默认参数成员的值,则使用默认参数,定义了则使用定义的值

#include <iostream>using namespace std;void fun(string name="kitty") //默认参数值  string name = "hello meimei"
{cout << name << endl;
}int main()
{fun();fun("hello meimei");return 0;
}

         4.内联函数

作用:提高代码运行效率,内联函数会在编译阶段展开

要求:少于5行,不能使用复杂函数(递归等)

内联函数与带参宏区别:

1.带参宏在预处理展开,只做替换不做处理

2.内联函数在编译阶段展开

使用:在函数前面加上inline

#include <iostream>using namespace std;#define MAX(x,y) x>y?x:yinline int max(int x,int y)
{return x>y?x:y;
}void fun(int a = 1)
{cout << a << endl;
}int main()
{fun();fun(2);int a = 1;int b = 1;int c = max(++a,b);cout << c << endl;a = 1;b = 1;c = MAX(++a,b);cout << c << endl;return 0;
}

四.C++中的结构体

1.C++结构体可以在定义结构体成员的时候,就可以初始化(在初始化结构体变量时,有赋值则用赋值,没有赋值则用原来初始化的值)

2.C++结构体成员可以有函数

3.C++结构体变量在定义时可以不加struct

4.C++结构体有访问权限(默认为public公共的)

5.C++结构体有继承

6.C++中的结构体有特殊成员函数

#include <iostream>using namespace std;struct student
{int age;string name;double score = 60;//赋值void output()//函数{cout << "年龄:" << age << endl;cout << "姓名:" << name << endl;cout << "分数:" << score << endl;}
};int main()
{student s1;//没有structs1.age = 18;s1.name = "张三";s1.score = 99;//后赋值用此值s1.output();student s2;s2.age = 20;s2.name = "李四";s2.output();return 0;
}

五.类

        1.概念

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

        2.C++中结构体和类的区别

1.默认的访问权限:

C++中的结构体默认的访问权限是:public共有的。

C++中的类默认的访问权限是:private私有的。

2.默认的继承方式:

C++中的结构体默认的继承方式是:public共有的。

C++中的类默认的继承方式是:private私有的。

3.关键字:

C++结构体:struct

C++类:class

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

        3.访问权限

1.public:类内,子类,类外都能访问

2.protected:类内,子类能访问,类外不行

3.private:类内能访问,子类,类外不行

类内:类的{}内的代码

        4.封装

本质上就是类的定义

#include <iostream>using namespace std;class Stu
{
private:int age;
protected:string name;
public:double score;void init(int age,string name,double score){Stu::age = age;Stu::name = name;this->score = score;}void output(){cout << "年龄:" << age << endl;cout << "姓名:" << name << endl;cout << "分数:" << score << endl;}
};int main()
{Stu s1;s1.init(18,"张三",99);s1.output();return 0;
}

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

1.函数内的参数名与类的成员名相同,成员要加上类名和作用域限定符(Stu::)

2.每个类成员都有一个this指针,在使用这个类变量的时候,该指针就会指向这个类

void init(int age,string name,double score){Stu::age = age;Stu::name = name;this->score = score;}

Part 2.

自己封装一个矩形类(Rect),拥有私有属性:宽度(width)、高度(height),

定义公有成员函数:

初始化函数:void init(int w, int h)

更改宽度的函数:set_w(int w)

更改高度的函数:set_h(int h)

输出该矩形的周长和面积函数:void show()

#include <iostream>using namespace std;class Rect
{
private:double width;double height;
public:void init(double width,double height){Rect::width = width;Rect::height = height;}void set_w(double width){Rect::width = width;}void set_h(double height){Rect::height = height;}void show(){cout << width*height << endl;}
};int main()
{Rect rec;rec.init(10,20);double width,height;cout << "请输入宽度" << endl;cin >> width;rec.set_w(width);cout << "请输入高度" << endl;cin >> height;rec.set_h(height);rec.show();return 0;
}

http://www.xdnf.cn/news/19242.html

相关文章:

  • MySQL之事务
  • SQL优化_以MySQL为例
  • ROS2的编译机制和工程组织形式
  • C++:list容器--模拟实现(下篇)
  • (链表)Leetcode206链表反转+Leetcode6删除链表的倒数第N个结点+虚拟头节点使用
  • Linux shell命令扩涨
  • 有限字长效应
  • Qt中的锁和条件变量和信号量
  • 数据结构青铜到王者第十三话---优先级队列(堆)(2)
  • Spring Cloud 和 Dubbo 是目前主流的两大微服务框架,分别代表了两种不同的技术路线
  • Systemd 启动初探
  • IPv6过渡技术6VPE
  • 【MYSQL】GET_LOCK使用方法简单解析
  • 直线与椭圆相交弦长计算公式
  • 【物联网】BLE Fundamentals 核心概念总结-广告-读写特征-LED控制-传感器通知-上下游通信过程
  • hashmap计算key的hash的时候为什么要右移16位
  • [光学原理与应用-329]:ZEMAX - 主要用途与主要功能
  • 复现 RoboDK 机械臂几何校准(Staubli TX2‑90L / TX200)
  • Redis(自写)
  • MySQL 简介
  • RocketMQ源码详解(NameServer启动流程)
  • Altium Designer中电路板设计
  • 【ICO】快速制作ICON教材/使用icofx3快速制作ico
  • 生成对抗网络(GAN):深度学习领域的革命性突破
  • 深入解析HarmonyOS:UIAbility与Page的生命周期协同
  • var maxScore = Int.MinValue 详解
  • 最长递增子序列(LIS)的 DFS 解法详解与实现
  • 【69页PPT】智慧工厂数字化工厂蓝图规划建设方案(附下载方式)
  • 【计算机组成原理】LRU计数器问题
  • 项目管理的五个阶段是什么