fun函数

c++第二次作业

匿名 (未验证) 提交于 2019-12-03 00:07:01
一.为什么要用函数 一个较为复杂的系统往往需要划分为若干子程序,然后对这些子程序分别进行开发和调试。在c++语言中这些子程序体现为函数。通常将相对独立的、经常使用的功能抽象为函数。函数编写好后,可以被重复使用。 使用函数的好处: (1)有利于代码重用。 (2)可以提高开发效率、增强程序的可靠性。 (3)便于分工合作和修改维护。 例:计算阶乘m!/((m-n)!*n!) 在下面的程序中反复调用函数fun,增加代码的可读性。 #include<iostream> using namespace std; int fun(int a) { int i,sum=1; for (i = 1; i <= a; i++) { sum = sum * i; } return sum; } int main() { int m, n; cin >> m >> n; cout << "m!/((m-n)!*n!)=" << fun(m) / (fun(m - n) * fun(n)); cout << endl; return 0; } 二.为什么要使用函数重载 函数重载的定义:两个以上的函数,具有相同的函数名,但是形参的个数或者类型不同,编译器根据实参和形参的类型及个数的最佳匹配,自动确定调用哪一个函数。 例:求两整数的平方和及两实数的平方和 #include<iostream> using

指针函数与函数指针

匿名 (未验证) 提交于 2019-12-02 23:54:01
1、明确谁是主体,前面是定语,后面是主体。 指针函数:返回指针的函数 函数指针:指向函数的指针 2、函数类型 函数包括:函数名,返回类型,形参表,修饰符。 函数类型表明一类函数,这一类函数的返回类型和形参表相同,而与函数名无关。 一个函数,把函数名去掉,就是函数类型。比如: int Fun (int a) --- 函数Fun,函数Fun的类型为 int (int a); 对于函数类型:在返回类型和形参表之间,加上一个函数名,就表示一个特定的函数。在返回类型和形参表之间,加上一个指针名,表示指向这一类函数的指针。 3、区分 int * Fun(int a ) :函数名为Fun,返回类型为 int* int (*Fun) (int a):函数指针,指向一类函数 int (int a) 函数指针也是一种类型,去掉指针名,即int (*) (int a),表示一类指针 思考:函数既然能返回指向数据的指针,当然也可以返回指向函数的指针,原则上应该这样写: int (*) (int a) G (int a); 实际上是这样写的:int (* G(int a) ) (int a), 阅读方法是按照优先级,由内到外。先看G (int a )是一个函数,形参表为int a,返回类型是 int (*) (int a) 为了便于理解,使用typedef,如下: typedef int (* PF)

shell 多线程编程和wait命令

匿名 (未验证) 提交于 2019-12-02 23:38:02
shell里面也是可以进行多线程编程的,而且十分方便,同时,wait命令可以进行shell的多线程同步控制。 1、启动后台子任务: sleep 10 #等待10秒,再继续下一操作 sleep 10 & #当前shell不等待,后台子shell等待 2、wait命令介绍 示例1:使用wait等待所有子任务结束 #!/bin/bash sleep 10 & sleep 5& wait #等待10秒后,退出 #!/bin/bash sleep 10 & sleep 5& wait $! #$!表示上个子进程的进程号,wait等待一个子进程,等待5秒后,退出 示例2:在函数中使用wait #!/bin/bash source ~/.bashrc fun(){ echo "fun is begin.timeNum:$timeNum" local timeNum=$1 sleep $timeNum & wait #这个只等待wait前面sleep echo "fun is end.timeNum:$timeNum" } fun 10 & fun 20 & wait #如果fun里面没有wait,则整个脚本立刻退出,不会等待fun里面的sleep echo "all is ending" 输出: fun is begin.timeNum:10 fun is begin.timeNum:20

java8 stream 注意点

匿名 (未验证) 提交于 2019-12-02 21:40:30
https://blog.csdn.net/lixiaobuaa/article/details/81099838 首先,Stream流有一些特性: Stream流不是一种数据结构,不保存数据,它只是在原数据集上定义了一组操作。//特别注意 这些操作是惰性的,即每当访问到流中的一个元素,才会在此元素上执行这一系列操作。 Stream不保存数据,故每个Stream流只能使用一次 关于应用在Stream流上的操作,可以分成两种:Intermediate(中间操作)和Terminal(终止操作)。中间操作的返回结果都是Stream,故可以多个中间操作叠加;终止操作用于返回我们最终需要的数据,只能有一个终止操作。至于哪些方法是中间操作,哪些方法是终止操作,我们一会儿再说。 使用Stream流,可以清楚地知道我们要对一个数据集做何种操作,可读性强。而且可以很轻松地获取并行化Stream流,不用自己编写多线程代码,可以让我们更加专注于业务逻辑。 接下来看一下Stream流的接口继承关系: 基础接口BaseStream<T, S extends BaseStream<T, S>>包含如下方法: Iterator<T> iterator(); Spliterator<T> spliterator(); boolean isParallel(); //判断是否是并行化流 S sequential()

函数定义的几种方式

自闭症网瘾萝莉.ら 提交于 2019-12-02 19:58:25
函数定义的形式很多.常见的有下面几种. 1.自定义函数(命名函数) function fn(){}; 2.函数表达式(匿名函数) var fun =function(){}; 3.利用new Function('n1','n2','n3',........,'函数体') var fun =new Function('a','b','c','console.log(a+b+c)'); fun(1,2,3);    3.1Function中必须都是字符串格式    3.2第三种方式执行效率低,所以很少用 4.所有函数都是Function的实例对象,函数也是属于对象 var fun =new Function('a','b','c','console.log(a+b+c)'); fun(1,2,3);console.dir(fun);console.log(f instanceof Object); 所以其中具体的对象关系可以总结为下图所示. 同样的逻辑关系对象也能旁通到ES5常用的构造函数与对象的属性继承. 来源: https://www.cnblogs.com/omiturix/p/11761774.html

C的指针函数

99封情书 提交于 2019-12-02 18:08:13
void* :返回值为任意类型的指针; void (*):表示函数为指针函数; void * (*fun)(*a):定义一个函数指针,名字为fun,返回值为一个指针,参数是指针a; 来源: https://www.cnblogs.com/zhangweigang/p/11756784.html

python函数内部获取函数名的两种方式

隐身守侯 提交于 2019-12-02 15:09:46
Python中从函数内部获取函数名和文件名,路径等的两种方式: 1.用sys模块中的_getframe().f_code.co_name获取函数名,sys里获取文件名的方法。 sys._getframe().f_code.co_filename #当前文件名,可以通过__file__获得 sys._getframe(0).f_code.co_name #当前函数名 2.用inspect模块中的inspect.stack(),获取到的内容里面有函数名,路径的等很多内容,可以用下标取要想的。 获取跟文件和路径有关的,个人感觉os模块更加方便一些。 两种方法案例如下: import inspect import sys def fun_aaa ( ) : fun_name = sys . _getframe ( ) . f_code . co_name print ( fun_name ) a = 1 return a def fun_bbb ( ) : print ( inspect . stack ( ) [ 0 ] [ 3 ] ) b = 2 return b if __name__ == '__main__' : a = fun_aaa ( ) b = fun_bbb ( ) print ( a , b ) 运行结果: fun_aaa fun_bbb 1 2 来源: https:

C++虚函数详解

…衆ロ難τιáo~ 提交于 2019-12-02 14:34:47
转自: c++虚函数 大牛的文章,就是通俗易懂,言简意赅。 前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家 一个清晰的剖析。 当然,相同的文章在网上也出现过一些了,但我总感觉这些文章不是很容易阅读,大段大段的代码,没有图片,没有详细的说明,没有比较,没有举一反三。不利于学习和阅读,所以这是我想写下这篇文章的原因。也希望大家多给我提意见。 言归正传,让我们一起进入虚函数的世界。 虚函数表 对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。这样,在有虚函数的类的实例中这个表被分配在了这个实例的内存中,所以,当我们用父类的指针来操作一个子类的时候

虚函数以及纯虚函数

天涯浪子 提交于 2019-12-02 11:27:30
   多态性 是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异,而采用不同的策略。   虚函数和纯虚函数都是实现多态的重要方法。本文就这两种方法进行分析以及比较 1、虚函数 在基类中声明为 virtual 并在一个或者多个派生类被重新定义的成员函数 语法规则: virtual 函数返回类型 函数名(参数表) {函数体} 语法分析:虚函数的声明和定义和普通的成员函数一样,只是在返回值之前加入了关键字virtual。      在基类当中定义了虚函数,可以再子类中定义和基类中相同函数名、相同参数、相同返回值和不同实现体的虚函数      定义为虚函数是为了让 基类函数的指针或者引用来指向子类。 #include<iostream> using namespace std; class A { public: void fun() { cout << "A::fun()..." << endl; } }; class B :public A { public: void fun() { cout << "B::fun()...." << endl; } }; int main() { A *a = new A; //A类指针指向A类对象 a->fun(); A *b = new B; //A类指针指向B类 对象 b->fun(); delete a;

c++第五次博客作业

本小妞迷上赌 提交于 2019-12-02 11:04:53
       C++虚函数,纯虚函数,抽象类以及虚基类的区别   Part1.C++中的虚函数 什么是虚函数: 直观表达就是,如果一个函数的声明中有 virtual 关键字,那么这个函数就是虚函数。 虚函数的作用: 虚函数的最大作用就是实现面向对象程序设计的一大特点,多态性,多态性表达的是一种动态的概念,是在函数调用期间,进行动态绑定,以达到什么样的对象就实现什么样的功能的效果。 虚函数的一般声明语法: virtual 函数类型 函数名 (形参表) 注意: 虚函数的声明只能出现在类的定义中,不能出现在成员函数实现的时候 虚函数一般不声明为内联函数,但是声明为内联函数也不会引起错误 在运行过程中要实现多态的三个条件: 类之间满足赋值兼容关系(也就是类之间有继承关系) 要声明为虚函数 调用虚函数时,要由成员函数或者是指针和引用来访问 代码举例 #include <iostream> using namespace std; class Base1 { public: public: virtual void play(); }; void Base1::play() { cout << "Base1::play()" << endl; } class Base2: public Base1 { virtual void play(); }; void Base2::play() {