精华内容
下载资源
问答
  • c++中执行文件指:main函数 函数文件:其他所有需要用到的函数c++中,函数文件名没有特殊讲究,将文件添加到工程目录便能使用 对函数的要求有三点 函数的完整文件 输入参数的定义 函数声明加入头文件 1.函数的...

    在matlab里.m文件分执行文件和函数文件
    在c++中执行文件指:main函数
    函数文件:其他所有需要用到的函数

    在c++中,函数文件名没有特殊讲究,将文件添加到工程目录便能使用
    在这里插入图片描述
    对函数的要求有三点

    函数的完整文件
    输入参数的定义
    函数声明加入头文件

    1.函数的完整文件

    #include <opencv2/opencv.hpp>
    using namespace cv;
    
    void cameracapture(Mat &frame, int mytime, int imageWidth,int imageHeight)
    {
    	char c = 0;
    	VideoCapture capture(0);
    	capture.set(CV_CAP_PROP_FRAME_WIDTH, imageWidth*2);//宽度2560
    	capture.set(CV_CAP_PROP_FRAME_HEIGHT, imageHeight);//高度720
    	
    	for (int i=0; i < mytime; i++)
    	{
    		capture >> frame;
    	}
    }
    

    函数的完整文件包括了函数需要的头文件

     #include <opencv2/opencv.hpp>
     using namespace cv;
    

    以及剩下的函数的程序段
    这里解释一下加&和不加&的区别
    Mat &frame 加&的变量传递的是变量地址,直白的理解为,加了后我在函数中对该变量修改后,会对我的主函数main中的对应变量进行修改。这里我的程序是打开相机,并把拍摄图像返回main函数,因此我需要随时根据拍摄修改我的main函数中frame的值。
    int mytime, int imageWidth,int imageHeight这些则是传入值,在函数内进行修改后不影响main里面的值,因为这些值只传入函数,而不需要函数再传回主函数。
    这里还有一点编程技巧
    我们通过函数调用的方式进行运算,有两种方式得到运算结果
    ①设置函数的返回值,return
    ②将传入值的地址(即传入值自身)交给函数,函数对其进行运算相当于直接对传入值进行运算。

    2.输入参数的定义

    我们在main中调用其他函数时,我们的输入参数需要提前定义

    main ()
    {
    Mat frame; 
    int mytime = 10;
    int imageWidth = 1280;
    int imageHeight = 720;
    cameracapture(frame, mytime, imageWidth, imageHeight);//注意这里和函数定义不同
    ………………
    }
    

    3.函数声明加入头文件

    我们调用其他函数前必须先声明

     void cameracapture(Mat &frame, int mytime, int imageWidth,int imageHeight)
    

    写入.h文件(头文件),写入头文件后也就告知了我们的项目,我们声明了,项目中是有该函数的定义的。为什么要用头文件?因为我们把我们用到的函数声明都写到一个.h文件里,下次再使用时我们直接#include XXX.h即可,没有必要再对用到的函数一个一个地声明。

    完成上面的三步,我们自己的函数就制作好了,使用起来比较方便。
    这里再扩展一下
    我们在数组传入函数,传出函数时可能会面临着数组无法修改的问题,这里二郎给大家提供一个解决办法,不是最优,但是可行
    main里面:

    float key_data[10][4] = { 0 };
    my_f(img_cir_L, img_cir_R, key_data);
    

    函数里面:

    void my_f(Mat rectifyImageL, Mat rectifyImageR, float(&key_data)[10][4])
    

    头文件里面:

     void my_f(Mat rectifyImageL, Mat rectifyImageR, float(&key_data)[10][4]);
    

    这样便能实现数组数据的传入和处理后结果的传递了

    展开全文
  • C++函数指针、指针函数、返回值为函数指针的函数浅谈 引言 函数指针、指针函数是C中重要而容易混淆的概念,博主将通过两个实例来说明这两个截然不同的概念。 而返回值为函数指针的指针函数就更难理解了,放在文章的...

    C++函数指针、指针函数、返回值为函数指针的函数浅谈

    引言

    函数指针、指针函数是C中重要而容易混淆的概念,博主将通过两个实例来说明这两个截然不同的概念。
    而返回值为函数指针的指针函数就更难理解了,放在文章的最后来介绍。

    函数指针

    函数指针是一种特殊的 指针,它指向函数的入口。
    例如int (*add)(int, int);定义了一个函数指针add,用于指向返回值为int,并且有两个int参数的函数,下面用实例来说明

    /**
     * 作者:lyn
     * 时间:2018.10.30
     * 此程序用来演示函数指针
     */
    #include<iostream>
    using namespace std;
    
    int addfunc(int a, int b) {
            return a + b;
    }
    int main() {
            int (*add)(int, int) = addfunc;
            //两种方法都可以
            //int (*add)(int, int) = &addfunc;
    
            int result = (*add)(1, 2);
            //两种方法都可以,建议使用第一种
            //int result = add(1, 2);
            cout << "通过函数指针调用函数进行计算结果:" << result << endl;
            result = addfunc(1, 2);
            cout << "通过直接调用函数进行计算结果:" << result << endl;
            return 0;
    }
    

    在这里插入图片描述

    指针函数

    指针函数是一种返回值为指针的 函数
    例如A *createA();声明了一个返回值为指向A类型的指针的,参数列表为空的函数(这句话读起来可能有一··绕口),实例说明

    /**
     * 作者:lyn
     * 时间:2018.10.30
     * 该程序用来演示指针函数
     */
    #include<iostream>
    using namespace std;
    class A {
            public:
                    A(int a) {
                            this->a = a;
                    }
                    int getA(){
                            return a;
                    }
            private:
                    int a;
    };
    
    //返回值为指向类型A的指针的函数
    A *createA() {
            return new A(1);
    }
    
    int main(){
            //创建一个指向A类型的指针,并调用createA创建一个A类型的对象
            A* b = createA();
            //通过指针调用类的方法
            cout << "b->a = " << b->getA() << endl;
            return 0;
    }
    

    在这里插入图片描述

    返回值为函数指针的函数

    其实在搞懂了函数指针和指针函数后,这个概念并不难懂,其实这就是一个复杂一点的指针函数,因为他的返回值为函数指针。
    先给一个例子:

    /*
    *本例是SGISTL源码中的一个函数,比普通的返回值为函数指针的函数要更复杂一点
    *因为本例中函数的参数也是一个函数指针
    */
    void (* set_malloc_handler(void (*f)()))()
    

    我们把例子从里往外看
    void (*f)()是一个函数指针,它用于指向一个返回值为void,无参数列表的函数
    * set_malloc_handler(void (*f)())这是一个指针函数,返回值为指针,它有一个参数,参数为一个函数指针(返回值为void,无参数列表的函数)
    void (* set_malloc_handler(void (*f)()))()这是一个指针函数,返回值为函数指针(返回值为void,无参数列表的一个函数),它有一个参数,参数为一个函数指针

    展开全文
  • C++函数参数的缺省值

    千次阅读 2019-01-05 22:10:57
    C++函数参数的缺省值 有一些参数的值在每次函数调用时都相同,书写这样的语句会使人厌烦。C++语言采用参数的缺省值使书写变得简洁(在编译时,缺省值由编译器自动插入)。  参数缺省值的使用规则: 【规则8-3-1...

    C++函数参数的缺省值

    有一些参数的值在每次函数调用时都相同,书写这样的语句会使人厌烦。C++语言采用参数的缺省值使书写变得简洁(在编译时,缺省值由编译器自动插入)。

        参数缺省值的使用规则:

    1. 【规则8-3-1】参数缺省值只能出现在函数的声明中,而不能出现在定义体中。

    例如:

        void Foo(int x=0, int y=0); // 正确,缺省值出现在函数的声明中

     

        void Foo(int x=0, int y=0)      // 错误,缺省值出现在函数的定义体中

        {

        }

    为什么会这样?我想是有两个原因:一是函数的实现(定义)本来就与参数是否有缺省值无关,所以没有必要让缺省值出现在函数的定义体中。二是参数的缺省值可能会改动,显然修改函数的声明比修改函数的定义要方便。

     

    1. 【规则8-3-2】如果函数有多个参数,参数只能从后向前挨个儿缺省,否则将导致函数调用语句怪模怪样。

    正确的示例如下:

    void Foo(int x, int y=0, int z=0);

    错误的示例如下:

    void Foo(int x=0, int y, int z=0); 

     

    要注意,使用参数的缺省值并没有赋予函数新的功能,仅仅是使书写变得简洁一些。它可能会提高函数的易用性,但是也可能会降低函数的可理解性。所以我们只能适当地使用参数的缺省值,要防止使用不当产生负面效果。示例8-3-2中,不合理地使用参数的缺省值将导致重载函数output产生二义性。

     

    #include <iostream.h>

    void output( int x);

    void output( int x, float y=0.0);

     

    void output( int x)

    {

        cout << " output int " << x << endl ;

    }

     

    void output( int x, float y)

    {

        cout << " output int " << x << " and float " << y << endl ;

    }

     

    void main(void)

    {

        int x=1;

        float y=0.5;

    //  output(x);          // error! ambiguous call

        output(x,y);        // output int 1 and float 0.5

    }

     

    示例8-3-2  参数的缺省值将导致重载函数产生二义性

    展开全文
  • C++函数数组

    千次阅读 2019-01-25 14:21:03
    在日常编码过程中,我们经常使用到数组,以C++的基本数据类型作为存储对象,而在某些特殊的情况下,我们需要使用到函数数组或函数指针(譬如回调函数),其实质为一个指针数组,数组内存储着各个函数的指针地址,在...

    在日常编码过程中,我们经常使用到数组,以C++的基本数据类型作为存储对象,而在某些特殊的情况下,我们需要使用到函数数组或函数指针(譬如回调函数),其实质为一个指针数组,数组内存储着各个函数的指针地址,在被调用时得到使用。现在就对C++的函数数组的使用进行简单的介绍。

    1.方法1:

    #include<iostream>
    #include<vector>
    
    using namespace std;
    
    
    vector<void(*)()> m_vecFuc;
    
    void fucPrint1()
    {
    	cout<<"fucPrint1()"<<endl;
    }
    void fucPrint2()
    {
    	cout<<"fucPrint2()"<<endl;
    }
    void fucPrint3()
    {
    	cout<<"fucPrint3()"<<endl;
    }
    int main()
    {
    	m_vecFuc.push_back(fucPrint1);
    	m_vecFuc.push_back(fucPrint2);
    	m_vecFuc.push_back(fucPrint3);
    	m_vecFuc[0]();
    	m_vecFuc[1]();
    	m_vecFuc[2]();
    	return 0;
    }

    在上方的代码中,将各个函数的指针作为存储元素存储于数组m_vecFuc中,调用时直接按照普通数组元素的调用方式即可,但是需要在后面加上()表示其参数列表,对于有返回值与形参元素的函数,在数组定义时对定义进行修改即可,引用时在其后面的括号中加上相应的形参元素。

    2.方法2:

    但是,还存在着另一个问题,在实际使用中,我们往往还涉及到了C++类中的成员函数,成员函数除了可见的形参元素外,还有一个隐藏的输入参数,即this指针,表明对应的实例对象数据成员的内存地址,而这时无法直接使用上文的代码进行函数数组元素的添加,必须要对成员函数进行转换,将this指针传入,并转变成员函数类型。

    所幸C++11提供了std::function<>和 std::bind()两个标准模板函数供我们使用,function的本质是一个模板,而bind的本质是一个函数,可以将类的成员函数进行转变,变为function<>类型的函数,具体使用代码如下:

    #include<iostream>
    #include<vector>
    #include<functional>
    
    using namespace std;
    
    class Base1{
    public:
    	void p1() {cout<<"Base1::p1()"<<endl;}
    	void p2() {cout<<"Base1::p2()"<<endl;}
    	void p3() {cout<<"Base1::p3()"<<endl;}
    };
    
    vector<function<void()>> m_vecFunc;
    
    void fucPrint1()
    {
    	cout<<"fucPrint1()"<<endl;
    }
    void fucPrint2()
    {
    	cout<<"fucPrint2()"<<endl;
    }
    void fucPrint3()
    {
    	cout<<"fucPrint3()"<<endl;
    }
    int main()
    {
    	Base1 b1;
    	m_vecFunc.push_back(fucPrint1);
    	m_vecFunc.push_back(fucPrint2);
    	m_vecFunc.push_back(fucPrint3);
    	m_vecFunc.push_back(bind(&Base1::p1,&b1));
    	m_vecFunc.push_back(bind(&Base1::p2,&b1));
    	m_vecFunc.push_back(bind(&Base1::p3,&b1));
    	m_vecFunc[0]();
    	m_vecFunc[1]();
    	m_vecFunc[2]();
    	m_vecFunc[3]();
    	m_vecFunc[4]();
    	m_vecFunc[5]();
    	cout<<"Hello world!"<<endl;
    	return 0;
    }

    通过以上代码,即可将全局函数与类的成员函数同意存储在相应类型的函数数组之中,值得注意的是,在QT的使用中还存在着一些问题。

    QT的信号槽机制是其特色机制,类内的任何函数均可以当做槽函数与跟其具有相同形参的信号进行连接但是如果在类内定义了一个相应的vector<function<void()>> m_vecFunc数组,再将类内的函数通过bind方式添加到数组中,采用m_vecFunc[0]()的形式与相应信号进行connec连接,却无法成功建立槽与函数的对应关系,编译器报错:

    vector<function<void()>> m_vecFunc;
    m_vecFunc.push_back(bind(&MainWindow::fucSlot1,this));
     connect(ui->pushButton,SIGNAL(pressed()),this,SLOT( m_vecFunc[0]()));

    QObject::connect: No such slot MainWindow::m_vecFunc[0]() in ..\QT_SignalSlot_Demo_0125_1\mainwindow.cpp:11

    QObject::connect: (sender name: 'pushButton')

    QObject::connect: (receiver name: 'MainWindow')

    如果采用以下方式进行绑定:

    vector<function<void()>> m_vecFunc;
    m_vecFunc.push_back((fucSlot1));
    

    对应的报错为:error: C3867: “MainWindow::fucSlot1”: 函数调用缺少参数列表;请使用“&MainWindow::fucSlot1”创建指向成员的指针

    不知是否有高手可以予以解答,是否可以使用函数数组的方式进行信号与槽函数的绑定?以上代码的具体错误原因是什么?

    展开全文
  • c++ 函数指针

    万次阅读 多人点赞 2019-06-15 21:41:38
    函数指针基础: 1. 获取函数的地址 2. 声明一个函数指针 3.使用函数指针来调用函数 获取函数指针: 函数的地址就是函数名,要将函数作为参数进行传递,必须传递函数名。 声明函数指针 声明指针时,必须指定...
  • c++ 函数重载(简单易懂)

    万次阅读 多人点赞 2018-09-07 11:32:48
    c++ 函数重载: 在同一个作用域内,可以声明几个功能类似的同名函数, 但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。 您不能仅通过返回类型的不同来重载函数。 demo: #include &...
  • C++函数前后加const

    千次阅读 多人点赞 2019-04-22 15:17:01
    const更大的魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。 函数前面的const: 返回值为const; 函数后面的const: const函数; const的函数不能对其数据成员进行修改操作。 const的对象,不能引用非...
  • c++函数const

    千次阅读 2018-12-05 11:46:48
    一个对象通过引用的方式传到函数f中,而函数f又不会通过修改对象的数据成员的值改变该对象的状态,那么最好将f的参数标记为const,如void setName( const string&amp;amp; n){ name = n;} 如果一个成员函数不...
  • 函数指针怎么声明?能用来做什么?什么时候用? 函数指针变量名称一定要和函数名字一样吗?一个函数只能定义一个函数指针吗? 给函数指针变量初始化,获取函数的地址时,有几种方式?可以不加取址&amp...
  • C++ 函数模板

    万次阅读 2018-08-13 17:42:51
    函数模板是通用的函数描述,它们使用泛型来定义函数,其中的泛型可用具体的类型替换。通过将类型作为参数传递给模板,可使编译器生成该类型的函数。由于模板允许以泛型(而不是具体类型)的方式编写程序,因此有时候...
  • C++函数头文件

    千次阅读 2020-03-15 20:39:56
    1.2020.03.15 最近在刷排序的题,发现自己写swap函数却用不了,后来干脆放弃,直接写无数次 ...后来百度swap()函数头文件才发现,c++内置了swap函数(还是swap函数模板),有 #include<iostream&...
  • C++函数编译原理和成员函数的实现

    千次阅读 2017-07-25 15:34:54
    【学习于C语言中文网,请勿转载】 对象的内存中只保留了成员变量,除此之外没有任何其他信息,程序运行时不知道 stu 的...C++函数的编译 C++和C语言的编译方式不同。C语言中的函数在编译时名字不变,或者只是简单的加
  • C++函数返回值和返回引用

    千次阅读 多人点赞 2018-10-26 15:09:57
    C++函数的返回过程基本可以分为两个阶段,返回阶段和绑定阶段,根据两个阶段中需要返回的值的类型不同(返回值和引用),和要绑定的值的类型(绑定值和引用)会产生不同的情况。 最基本的规则是先返回,再绑定,...
  • Python3.6调用C++函数

    千次阅读 2018-06-25 17:10:54
    函数内部此使用的函数,由于Py_InitModule函数是python2.x中的函数,在python2.x中可以正常工作,但在python3.x中不再使用,因此此处在cpp中创建了一个PyModuleDef结构,然后将其引用传递给PyModule_Create。...
  • 1、C调用C++ 本文给出了一种方法。基本思想是,写一个 wrapper文件,把 C++类封装起来,对外只提供C语言的接口,和 C++i相关的都在 wrapper的实现文件里实现。 //------apple.h #ifndef __APPLE_H__ #define __...
  • C++函数默认参数定义参数添加顺序注意事项转载链接 定义     在C++中,定义函数时可以给形参指定一个默认的值,这样调用函数时如果没有给这个形参赋值(没有对应的实参),那么就使用这个默认的值。也就是说,...
  • C++ 函数指针及其作用详解

    千次阅读 2018-09-11 21:21:43
    查了很多资料,对函数指针已了解。 函数指针指向某种特定类型,函数的类型由其参数及返回类型共同决定,与函数名无关。举例如下: int add(int nLeft,int nRight);//函数定义   该函数类型为int(int,int),...
  • c++函数模板与函数指针

    千次阅读 2018-12-12 21:27:26
    函数指针 1、概念:与数据项相似,函数也有地址,函数的地址是存储其机器语言代码的内存的开始地址。...(《C++ Primer Plus 中文版》(第五版 p216)) 2、声明函数指针:double(*pf)(int),即声明了一个函...
  • 关于C++函数返回指针的情况

    千次阅读 2019-09-17 21:47:45
    局部变量的指针,若非static,则作用域仅为函数本身,在return之后即被释放,也即指针指向一个无效变量,因此不合理 而局部指针变量则不同,尽管指针变量本身的生命期在return之后也结束,但只要其指向对象有效,其...
  • 请教各位,我在书上看到函数指针,书上先声明一个函数,然后再声明一个函数指针。 再将函数赋给函数指针。但是我按照这个方式做了之后,发现报错了。请问各位这是什么 原因? ![我写的代码]...
  • c++函数的基本使用

    千次阅读 多人点赞 2018-12-10 11:11:53
    函数 ...1.一个程序有且只有一个main()函数c++从main()函数开始执行,在main()函数结束。 2.c++语言中,所有函数都是平行独立的,无主次、相 互包含之分。函数可以嵌套调用,不可嵌套定义。...
  • C++函数中返回多个数值的三种方法

    万次阅读 多人点赞 2019-05-28 15:59:56
    C++ 中指针函数的基本形式: 函数类型 * 函数名 (参数数据类型 参数1, 参数数据类型 参数 2,...){ 执行体 1; 执行体 2; ... } 例如下面这个函数就是一个指针函数: int * a(int b[], int c){ cout<<...
  • c++函数返回一个数组

    万次阅读 多人点赞 2018-12-13 19:39:02
    调用某个函数时经常需要函数返回一个值,我们都知道c++函数返回的是一个copy,所以当只返回一个值时不会出现什么问题,直接return一个copy就行了,但是如果返回一个数组,事情就变得有趣了,我最近就遇到了这个...
  • c++函数重载机制实现原理

    千次阅读 多人点赞 2017-05-30 00:48:58
    一、c++函数重载的定义:在同一作用域类,一组函数的函数名相同,参数列表不同(参数个数不同/参数类型不同),返回值可同可不同二、函数重载的作用:重载函数通常用来在同一个作用域内命名一组功能相似的函数,这样...
  • C++ 函数的声明和定义

    万次阅读 多人点赞 2019-03-23 01:07:00
    在程序中使用函数时,你必须先声明它然后再定义,声明的目的是告诉编译器你即将要定义的函数的名字是什么,返回值的类型是什么以及函数是什么。而定义则是告诉编译器这个函数的功能是... 1,在C++中,函数原型就是函...
  • C++函数指针的三种定义方法

    千次阅读 2019-11-01 23:50:02
    一、C的函数指针定义方法 定义一个两个int参数,一个int返回值的函数指针类型 typedef int (*func)(int,...二、C++函数指针定义方法 function<int(a,b)> a 三、实践 #pragma once #include #include using...
  • C++ 函数模板作为类模板的成员函数

    千次阅读 2019-08-01 22:19:48
    /************函数模板作为类模板成员********/ #include using namespace std; template class A { public: template void Func(T2 t) {cout;}//成员函数模板 }; int main() { A<int> a; a.Func...
  • C++ 函数指针和函数类型

    千次阅读 2018-04-12 23:06:09
    函数指针和函数类型 函数指针指向的是函数而非对象。和其他指针类型一样,函数指针指向某种特定类型。 函数类型由它的返回值和参数类型决定,与函数名无关。 bool length_compare(const string &amp;, ...
  • c++函数多个返回值

    千次阅读 2019-05-07 10:43:52
    这个有多种实现方式 1,返回结构体 2,传入参数为 引用或者指针 ...目前只在c++11及以上才支持 参考 int myint; char mychar; std::tuple<int, float, char> mytuple; mytuple = std::make_tuple(10, ...
  • C++函数的重载、重写与隐藏

    千次阅读 2018-05-31 00:34:22
    (1)函数重写:也称作覆盖,是用于类的继承中,函数名、参数个数、类型都相同,仅函数体不同。 (2)函数重载:是指同一作用域的不同函数使用相同的函数名,但是参数个数或类型不同。 (3)函数隐藏:既不是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,437,438
精华内容 574,975
关键字:

c++函数

c++ 订阅