week1 从C走进C++

1.函数指针
2.命令行参数
3.位运算
4.引用
5.const关键字和常量
6.动态内存分配
7.内联函数和重载函数
8.函数缺省参数

1 函数指针

基本概念:
程序运行期间,每个函数都会占用一段连续的内存空间。而函数名就是该函数所占内存区域的起始地址(也称“入口地址”)。我们可以将函数的入口地址赋值给一个指针变量,使该指针变量指向该函数。然后通过指针变量就可以调用这个函数。这种指向函数的指针变量就称为***“函数指针”***

在这里插入图片描述
定义形式
类型名 (* 指针变量名)(参数类型1,参数类型2,…);
例如:int (* pf)(int, char);
表示pf是一个函数指针,他所指向的函数,返回值类型应是int,该函数应有2个参数,第一个是int类型,第二个是char类型。
使用方法
可以用一个原型匹配的函数的名字给一个函数指针赋值。
要通过函数指针调用它所指向的函数,写法为:
函数指针名(实参表);

#include <stdio.h>
#include <iostream>
using namespace std;
void PrintMin(int a, int b){	
	if(a < b) printf("%d \n", a);
	else printf("%d \n", b);
}
int main(){
	//函数指针
	void (* pf) (int, int);
	int x = 4, y =5;
	pf = PrintMin;
	pf(x, y); //调用了pf指向的那个函数
	return 0;
}

在这里插入图片描述

1.1 函数指针和qsort库函数

C 语言快速排序库函数:
可以对任意类型的数组进行排序。

void qsort(void *base, int nelem, unsigned int width, int (* pfCompare)(const void *, const void *));

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

#include <stdio.h>
#include <iostream>
using namespace std;
#define NUM 5
int MyCompare(const void * elem1, const void * elem2)
{
	unsigned int *p1, *p2;
	p1 = (unsigned int *) elem1; //"* elem1" 非法
	p2 = (unsigned int *) elem2;
	return (* p1 % 10) - (* p2 % 10);
}
int main(){	
	unsigned int an[NUM] = {8,123,11,10,4};
	qsort(an, NUM, sizeof(unsigned int), MyCompare);
	for(int i = 0; i < NUM; i++)
	printf("%d \n", an[i]);
	return 0;
}

2 命令行参数

在这里插入图片描述在这里插入图片描述

#include <stdio.h>
int main(int argc, char * argv[]){

	for(int i = 0; i < argc; i++)
		printf("%s \n", argv[i]);

	return 0;
}
project(test)
cmake_minimum_required(VERSION 2.8)
set(CMAKE_CXX_STANDARD 11)
add_executable(main main.cpp)

在这里插入图片描述命令行参数使用空格分开,如果命令行内部就有空格就用引号起来。

3 位运算

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述在这里插入图片描述![在这里插入图片描述](https://img-blog.csdnimg.cn/20190921092137730.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lrd2p0,size_16,color_FFFFFF,t_70

4 引用

r引用了n,那么r 和n就是一回事了
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述SetValue()他的返回值是一个整型的引用,然后它返回的值又是n. 这个函数的返回值是一个引用,我们在最后写了return n; 那么它引用了n。那一个函数的返回值是引用。能够带来什么好处呢?
直观的说,我们就可以把这个函数调用写在赋值号的左边,啊,我们对一个函数调用返回的结果可以进行赋值,SetValue它的返回值是一个引用,而这个引用又引用了全局变量n,那么这个时候,我们对SetValue的返回值进行赋值,实际上就是等价于对n进行赋值。所以我们输出n的时候我们看到,n的值变成了40。

在这里插入图片描述在这里插入图片描述在这里插入图片描述

5 const关键字和常量

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述strcpy()函数的第一个参数的类型实际上是char * 类型,这里不能把一个const char * 的指针取赋值给一个char * ,(因为const char * 指向的内容倾向于不被改变,如果赋值给一个char * 非常量的指针,那么有可能会通过这个char *指针改变了const char * 指向的内容,这样不合适,所以出错)

在这里插入图片描述

6 动态内存分配

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。

7 内联函数和重载函数

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述如果两个函数的函数名和参数都一样,只是返回值不一样,这个不叫重载,叫重复定义。
在这里插入图片描述

8 函数缺省参数

在这里插入图片描述在这里插入图片描述

基于SSM框架的智能家政保洁预约系统,是一个旨在提高家政保洁服务预约效率和管理水平的平台。该系统通过集成现代信息技术,为家政公司、家政服务人员和消费者提供了一个便捷的在线预约和管理系统。 系统的主要功能包括: 1. **用户管理**:允许消费者注册、登录,并管理他们的个人资料和预约历史。 2. **家政人员管理**:家政服务人员可以注册并更新自己的个人信息、服务类别和服务时间。 3. **服务预约**:消费者可以浏览不同的家政服务选项,选择合适的服务人员,并在线预约服务。 4. **订单管理**:系统支持订单的创建、跟踪和管理,包括订单的确认、完成和评价。 5. **评价系统**:消费者可以在家政服务完成后对服务进行评价,帮助提高服务质量和透明度。 6. **后台管理**:管理员可以管理用户、家政人员信息、服务类别、预约订单以及处理用户反馈。 系统采用Java语言开发,使用MySQL数据库进行数据存储,通过B/S架构实现用户与服务的在线交互。系统设计考虑了不同用户角色的需求,包括管理员、家政服务人员和普通用户,每个角色都有相应的权限和功能。此外,系统还采用了软件组件化、精化体系结构、分离逻辑和数据等方法,以便于未来的系统升级和维护。 智能家政保洁预约系统通过提供一个集中的平台,不仅方便了消费者的预约和管理,也为家政服务人员提供了一个展示和推广自己服务的机会。同时,系统的后台管理功能为家政公司提供了强大的数据支持和决策辅助,有助于提高服务质量和管理效率。该系统的设计与实现,标志着家政保洁服务向现代化和网络化的转型,为管理决策和控制提供保障,是行业发展中的重要里程碑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值