当前位置: 首页 > 文档资料 > OpenFOAM 编程入门 >

函数

优质
小牛编辑
132浏览
2023-12-01

编程的乐趣在于自己编写函数。C++中的函数可不是高等数学各种数学操作符的函数。但C++中的函数则可以实现数学计算的功能。本节简单介绍C++中的函数,进一步的为了介绍C++中的类做准备。本节不会介绍函数的全功能,同学们看完本节,能看懂函数即可。

现在用一个例子来表示函数的作用。比如要计算1+2的结果并输出,C++中的程序可以这样写:

#include <iostream>

using namespace std;

int main()
{
    int a = 1;
    int b = 2;
    int result = a + b;

    cout<< "1 + 2 = " << result << endl;

    return 0;
}

如果要把上面的程序写成函数,则为:

#include <iostream>

using namespace std;

int sum(int a, int b);//函数原型

int main()
{
    int a = 1;
    int b = 2;
    int result = sum(a, b);//函数的调用

    cout<< "1 + 2 = " << result << endl;

    return 0;
}

int sum(int a, int b)//函数定义
{
    return a + b;
}

现在来看二者的区别。首先,后段代码中的int sum(int a, int b);表示函数的原型。函数的原型通常置于主程序之前,其告诉编译器在主程序中将会有一些代码调用这个函数,比如在本例子中就通过int result = sum(a, b);调用了sum(a ,b)函数。具体的:

  • 函数原型中应定义函数的返回类型。本例子中函数原型中第一个关键词int表示返回类型,也就是经过函数运算处理后,返回一个整形;
  • 函数原型中应定义函数的名称。本例子中函数原型中函数名称为sum(),也就是说在调用的时候需要用sum()
  • 函数原型中应定义函数的参数。本例子中函数原型中函数参数(括号内)为int a, int b,也就是说函数在通过sum()调用的时候,需要传入两个int参数,其中第一个为a,第二个为b; 现在列举一些其他函数类型的实例供举一反三:
void nothing();//函数返回void类型(空类型),名称为nothing(),不传入任何参数

int main()
{
    nothing();//直接调用nothing()函数
    return 0;
}

void nothing()//函数定义
{
//函数具体计算代码略
}
double shit(double a, int b);//函数返回double类型,名称为shit(),传入一个double类型a,一个int类型b

int main()
{
    double whatName;
    double a = 2.1;
    int b = 0;
    whatName = shit(a, b);//调用shit()函数并将返回值赋给whatName
    return 0;
}

double shit(double a, int b)//函数定义
{
//函数具体计算代码略
}

另外,如果函数定义在main()函数之前,则可以省略掉函数原型,比如下面的代码和上面的作用相同:

//函数返回double类型,名称为shit(),传入一个double类型a,一个int类型b
double shit(double a, int b);
{
//函数具体计算代码略
}

int main()
{
    double whatName;
    double a = 2.1;
    int b = 0;
    whatName = shit(a, b);//调用shit()函数并将返回值赋给whatName
    return 0;
}

OpenFOAM实例

下面的代码则在OpenFOAM中很常见:

//在main()函数之前的函数定义,返回volScalarField类型,函数名为Function()
volScalarField Function
(
    //传入一个volVectorField类型
    volVectorField U,
    //传入一个dimensionedScalar类型
    dimensionedScalar nu
)
{
//略    
}

int main()
{
    volScalarField p = Function(velocity, nu);
    //声明一个volScalarField类型叫做p
    //将Function(velocity, nu)函数返回的volScalarField赋值给p
}

这些就是C++中函数最基本的用法。在这里,用户应该能看懂OpenFOAM中基本的函数了。比如下面是直接抄自OpenFOAM的代码:

U = U - rAU*grad(p);

其中grad(p)为一个函数,函数名字为grad(),传入参数p,返回一个变量类型并赋值给U

另外一个例子:

if (transonic())

其中transonic()表示函数名为transonic()的函数,不需要传入参数。其返回一个true或者falseif判断。

再看下面这个例子:

scalar rho(scalar p, scalar T) 
{
    return 1000 + p/476*T;
}

其表示rho()函数返回一个scalar类型,在调用的时候需要传入scalar p, scalar T参数。

好了,本节只是介绍C++中基本的函数功能,为用户后期学习类做铺垫。当然函数更丰富的功能比如const函数,函数模板等,可参考其他C++教材。