C到C++过渡

C到C++过渡

  • 函数提高
    • 函数重载
    • 函数模板
    • 有默认参数的函数
  • 结构体与类
    • 结构体
    • 类对象
    • 封装

函数提高

函数重载

C++允许用同一函数名定义多个函数, 而这些函数的参数个数和参数类型可以不相同。这就是函数重载即对一个函数名重新赋予它新的含义使一个函数名可以多用。所谓重载,其实就是“一物多用”。

函数重载条件

  • 函数名相同
  • 函数参数类型 或者 参数个数 或者 参数顺序三者中至少有一种不同核心条件
  • 同一个作用域下

例:

int max(int a, int b);
double max(double a, double b);
int max(int a, int b, int c);int main()
{int a=4, b=5, c=3;double d1=1.2, d2=3.3;cout << "max=" << max(a,c) << endl;cout << "max=" << max(a,b,c) <<endl;cout << "max=" << max(d1,d2) << endl;return 0;}int max(int a, int b)
{return a>b?a:b;
}
double max(double a, double b)
{return a>b?a:b;
}
int max(int a, int b, int c)
{int max;max = a>b?a:b;max = max>c?max:c;return max;
}

系统会根据调用函数时给出的信息去找与之匹配的函数,上面的main函数3次调用max函数而每次实参的类型或个数不同,系统就根据实参的类型找到与之匹配的函数然后调用该函数。
  在使用重载函数时, 同名函数的功能应当相同或相近, 不要用同一函数名去实现完全不相干的功能(如求最大值和求三角形面积), 虽然程序也能运行,但可读性不好易使人莫名其妙。重载的方法是很有用的, 后面还会有运算符的重载。
  能否对函数实现体进行简化呢。

函数模板

C++提供了函数模板,所谓函数模板, 实际上是建立一个通用函数其函数类型和形参类型不具体指定, 用一个虚拟的类型来代表这个通用函数就称为函数模板。凡是函数体相同的函数都可以用这个模板来代替不必定义多个函数,只需要定义一个模板即可。
例如定义以下模板用于求最大值:

template <typename T>	//模板声明,其中T为类型参数
T max(T a, T b, T c)	//定义一个通用函数,用T作虚拟的类型名
{T max;max = a>b? a : b;max = max>c? max : c;return max;
}

实际调用

#include<iostream>
using namespace std;template <typename T>	//模板声明,其中T为类型参数
T max(T a, T b, T c)
{T max;max = a>b? a : b;max = max>c? max : c;return max;
}int main()
{int a=4, b=5, c=3;double d1=1.2, d2=3.3;cout << "max=" << max(a,b,c) <<endl;cout << "max=" << max(d1,d2) << endl;return 0;	
}

可以看到,用函数模板比函数重载更方便,程序更简洁。但应注意它只适用于函数体相同函数的参数个数相同而类型不同的情况,如果参数的个数不同,则不能用函数模板。
当然类型参数可以不止一个, 可以根据需要自行灵活确定个数,如:

template<typename T>
void printArray(T arr[], int len) {for (int i = 0; i < len; i++) {cout << arr[i] << " ";
}cout << endl;
}

有默认参数的函数

在C++中,函数的形参列表中的形参是可以有默认值的,但指定默认值的参数必须放在形参表列中的最右端,否则出错。
语法
返回值类型 函数名 (参数= 默认值){ }
注意点:

  • 如果某个位置参数有默认值,那么从这个位置往后,从左向右,必须都要有默认值
  • 如果函数声明有默认值,函数实现的时候就不能有默认参数
  • 一个函数不能既作为重载函数, 又作为有默认参数的函数

例:

#include<iostream>
using namespace std;int max(int a, int b, int c=0);int main()
{int a=3, b=4, c=5;cout << "max=" << max(a,b) << endl;cout << "max=" << max(a,b,c) <<endl;return 0;		
}int max(int a, int b, int c)
{int max;max = a>b? a : b;max = max>c? max : c;return max;
}

结构体与类

结构体

  • 在前期对学生成绩统计,需要根据学生的姓名或ID进行查找,并对学生的信息按成绩进行排序,以及链表的学习中,我们早已接触过结构体,即将学生的一些信息封装到一种特殊的数据类型中进行保存,当然在结构体也可以有函数指针,指向实现一定功能的函数,具体的结构体内容可回顾:结构体整理
    以下给出结构体的基本定义进行回顾:
    struct Student		//自定义类型
    {int score;		//分数 char name[128];		//名字 
    };
    

类对象

  • 而在面向对象开发过程中,总认为一切事物皆对象(结构体),有各自的信息和一些函数。
    C++认为万事万物都皆为对象,任何一个对象都应当具有两个要素,即属性和方法
    例如:
  • 人可以作为对象,属性有姓名、年龄、身高、体重…,行为有走、跑、跳、吃饭、唱歌…
  • 车也可以作为对象,属性有轮胎、方向盘、车灯…, 行为有载人、放音乐、放空调…
    具有相同性质的对象,我们可以抽象称为,人属于人类,车属于车类

封装

封装的意义

  • 将有关的数据和操作代码封装在一个对象中,形成一个基本单位,各个对象之间相互独立,互不干扰
  • 将对象中的某些部分对外隐蔽,即隐蔽其内部细节,只留下少量接口,以便与外部连接,接收外部消息
    类的声明与定义:
    class Student
    {
    public://定义一个成员函数 void display(){cout <<"num:"  << num << endl;cout <<"name:" << name << endl;cout <<"sex:"  << sex << endl;	}	
    private:// 声明三个成员变量 int num;char name[20];char sex;
    };
    

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

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

相关文章

231202 刷题日报

周四周五&#xff0c;边值班边扯皮&#xff0c;没有刷题。。 今天主要是做了: 1. 稀疏矩阵压缩&#xff0c;十字链表法 2. 快速排序 3.349. 两个数组的交集​​​​​ 4. 174. 地下城游戏 要注意溢出问题&#xff01;

外包搞了6年,技术退步明显......

先说情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近6年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…

vue项目报错及解决npm run build:prod打包错误

vue项目报错及解决npm run build:prod打包错误 执行dev环境时加载失败了该变量&#xff0c;在package.json文件中 删掉 解决方法&#xff1a; 打包成功&#xff1a;

使用 OpenFunction 在任何基础设施上运行 Serverless 工作负载

作者&#xff1a; 霍秉杰&#xff1a;KubeSphere 可观测性、边缘计算和 Serverless 团队负责人&#xff0c;Fluent Operator 和 OpenFunction 项目的创始人&#xff0c;还是多个可观测性开源项目包括 Kube-Events、Notification Manager 等的作者&#xff0c;热爱云原生技术&am…

Hdoop学习笔记(HDP)-Part.16 安装HBase

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

MathType 7.5.2中文版软件使用期到了怎么办?

MathType 7.5.2中文版作为一款专业的公式编辑器&#xff0c;MathType受到很多人的青睐&#xff0c;它可以将编辑好的公式保存成多种图片格式或透明图片模式&#xff0c;可以很方便的添加或移除符号、表达式等模板&#xff08;只需要简单地用鼠标拖进拖出即可)&#xff0c;也可以…

基于SpringBoot蜗牛兼职网的设计与实现

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;蜗牛兼职网当然也不能排除在外。蜗牛兼职网是以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c…

如何优雅的关闭一个IIS站点

众所周知&#xff0c;当我们使用IIS的时候&#xff0c;在使用负载均衡的情况下&#xff0c;想停掉一个站点&#xff0c;通常会点击Sites&#xff08;网站&#xff09;中的Stop&#xff08;停止&#xff09;来停止一个站点。但是这样做&#xff0c;会带来一个问题&#xff0c;当…

云架构的思考1--云计算有什么不同,为什么上云

云计算这个词提出来已经很久&#xff08;大概在2006年&#xff09;&#xff0c;在10年前听到这个东西&#xff0c;都说是一个未来趋势。现在这个东西已经不是一个未来趋势&#xff0c;而是已经渗入到方方面面的一个服务&#xff0c;现在一个中小型的创业公司信息化都会优先选择…

css中元素水平居中的方式

文章目录 前言水平居中&#xff1a;垂直居中方法一: text-align: centerdisplay: table-cell方法二:父元素静态定位子元素通过相对定位来实现方法三:通过静态和相对定位方法四 css图片居中用text-align:center无效怎么回事&#xff1f;如何让图片在DIV中水平和垂直两个方向都居…

接口自动化测试思路和实战之模块化测试脚本框架

模块化测试脚本框架 需要创建独立的可描述的模块、程序片断以及待测试应用程序的脚本。这些小脚本进行组合&#xff0c;就能组成用来独立运行特定的测试的测试用例脚本。 场景一: 开发把 access_token接口地址由/cgi-bin/token 改为/cgi-bin/get_token或者修改参数等 》开发把…

【LeetCode】链式二叉树OJ题---C语言版

链式二叉树OJ题 一、单值二叉树&#xff08;1&#xff09;题目描述&#xff1a;&#xff08;2&#xff09;思路表述&#xff1a;&#xff08;3&#xff09;代码实现&#xff1a; 二、二叉树最大深度&#xff08;1&#xff09;题目描述&#xff1a;&#xff08;2&#xff09;思路…

解套方式之认识T+0

在炒股中&#xff0c;大盘弱势调整中投资者如果被套&#xff0c;又不愿意止损离场&#xff0c;为了尽量减少亏损、摊低买入总成本尽可能早日解套&#xff0c;有一种操作对策——做“T0”摊低买入总成本&#xff0c;这种操作方式通过经常性的赚取短线利润&#xff0c;达到最终降…

docker容器中创建非root用户

简介 用 docker 也有一段时间了&#xff0c;一直在 docker 容器中使用 root 用户肆意操作。直到部署 stable diffusion webui 我才发现无法使用 root 用户运行它&#xff0c;于是才幡然醒悟&#xff1a;是时候搞个非 root 用户了。 我使用的 docker 镜像文件是 centos:centos…

LeetCode的几道题

一、捡石头 292 思路就是&#xff1a; 谁面对4块石头的时候&#xff0c;谁就输&#xff08;因为每次就是1-3块石头&#xff0c;如果剩下4块石头&#xff0c;你怎么拿&#xff0c;我都能把剩下的拿走&#xff0c;所以你就要想尽办法让对面面对4块石头的倍数&#xff0c; 比如有…

Linux shell中的函数定义、传参和调用

Linux shell中的函数定义、传参和调用&#xff1a; 函数定义语法&#xff1a; [ function ] functionName [()] { } 示例&#xff1a; #!/bin/bash# get limit if [ $# -eq 1 ] && [ $1 -gt 0 ]; thenlimit$1echo -e "\nINFO: input limit is $limit" e…

KM算法,C语言版本和Matlab版本

在这里我们不多介绍原理&#xff0c;直接看代码就好了。 C语言版本 #include<stdio.h> #include<string.h> const int maxn305; const int INF(1<<30)-1; int g[maxn][maxn]; int lx[maxn],ly[maxn]; int match[maxn]; bool visx[maxn],visy[maxn]; int sla…

C 标准库 <math.h>

C 标准库 <math.h> C <math.h>头文件声明了一组函数来执行数学运算&#xff0c;例如&#xff1a;sqrt()计算平方根&#xff0c;log()查找数字的自然对数&#xff0c;等等。 math.h 头文件定义了各种数学函数和一个宏。在这个库中所有可用的函数都带有一个 double…

CPU 使用率和负载Load

优质博文&#xff1a;IT-BLOG-CN 一、CPU 使用率 CPU使用率是 CPU处理非空闲任务所花费的时间百分比 。例如单核CPU 1s内非空闲态运行时间为0.8s&#xff0c;那么它的CPU使用率就是80%&#xff1b;双核CPU 1s内非空闲态运行时间分别为0.4s和0.6s&#xff0c;那么&#xff0c;…

IDEA2023安装教程(超详细)

文章目录 前言安装IntelliJ IDEA1. 下载IntelliJ IDEA2. 运行安装程序3. 选择安装路径4. 选择启动器设置5. 等待安装完成6. 启动IntelliJ IDEA7. 配置和设置8. 激活或选择许可证9. 开始使用 总结 前言 随着软件开发的不断发展&#xff0c;IntelliJ IDEA成为了许多开发人员首选…