当定义类对象时,构造函数会自动执行。因为一个类可能会有包括默认构造函数在内的不止一种构造函数,下面讨论如何调用特定的构造函数。在这种情况下,会执行默认的构造函数,从而将sa的数据成员初始化为0。如果参数的类型和顺序不与任何构造函数相匹配,则C++将使用类型转换并寻找最佳匹配。......
2023-11-07
在使用函数时,要先对函数进行定义,确定它要实现的功能。函数的使用就是调用函数的过程。在函数定义和调用中,把传递给函数的值称为实际参数,把函数内部用来接收传递给函数的值的变量称为形式参数。
1.函数定义
C++中每一个函数的定义都是由4个部分组成的,即函数类型、函数名、函数参数表和函数体。其形式如下:
函数类型 函数名(函数参数表)
其中,“函数类型”决定了函数所需要的返回值类型,它可以是函数或数组之外的任何有效的C++数据类型,包括复合数据类型等。如果不需要函数有返回值(只是一个过程调用),则只要定义函数的类型为void即可。“函数名”是一个有效的C++标识符,其后面必须跟一对圆括号“()”,以区别于变量名及其他用户定义的标识名。
“函数参数表”写在括号中,各参数(函数定义中的参数称为形式参数或形参)以逗号隔开,每个参数由参数类型和参数名表示。“函数参数表”中的参数个数可以为0,但圆括号不能省略。
“函数体”由在一对花括号中的若干条语句组成,用于实现这个函数执行的功能。C++不允许在一个函数体中再定义另一个函数。
下面是一个函数的例子,它返回两个整数中较大者。函数有两个形参x和y,返回值类型为int:
函数定义中的形参是指调用此函数所需要的参数个数和类型。一般地,仅当函数被调用时,系统才会给形参分配内存单元,而调用结束后,形参所占用的内存单元又被释放。
在函数定义中,return关键字负责将后面的值作为函数的返回值,并将程序控制返回到调用此函数的位置处。若函数类型为void,函数体中就不需要return语句或者return的后面什么也没有。
注意:一旦执行return语句,函数体内return后面的语句就不再执行。
2.函数的声明
定义一个函数就是为了以后的调用,但如果函数定义在后而调用在前,就会产生编译错误。为此,必须将函数定义在前或者在调用前进行“函数的声明”。函数声明消除了函数定义的位置影响。也就是说,不管函数是在何处定义的,只要在调用前进行函数的声明,就可保证函数调用的合法性。虽然函数不一定在程序的开始就声明,但为了提高程序的可读性和保证简洁的程序结构,最好将主函数main放在程序的开头,而将函数声明放在主函数main之前。
声明一个函数的格式如下:
函数类型函数名(函数参数表);
其中,“函数类型”指出函数返回值的类型;“函数名”指出被声明的函数的名字;“函数参数表”声明该函数的形参,如同函数定义一样,“函数参数表”中的参数个数可以为0,但圆括号不能省略。
在声明函数时,“函数参数表”有两种方式:一种与函数定义时的“函数参数表”一样,给出形参名和对应的数据类型的列表;另一种方式是只给出形参的数据类型的列表。例如,对于前面定义的max函数,以下两个声明语句是等同的:(www.chuimin.cn)
intmax(int x,int y);
intmax(int,int);
注意:在声明函数时,不要忘记末尾的分号“;”。
3.函数的调用
调用函数时,在函数名后跟参数(调用函数时的参数称为实际参数或实参),参数用逗号隔开。调用时,将实参中的实参值逐个代入形参,这一过程称为向函数传递参数。函数调用的一般形式如下:
函数名(实际参数表);
其中,“实际参数表”与函数定义或声明时的“函数参数表”相对应,它是实际调用函数时所给定的常量、变量或表达式,且必须有确定的值。
例如:
int a=2,b=10,c;
c=max(a,b);
或
int c=max(2,10);
都是合法的调用。
注意:实参与形参的个数应相等、类型应一致,且按顺序一一对应传递数据。
在C++中,调用一个函数的方式可以有很多,例如:
有关C++程序设计基础教程的文章
当定义类对象时,构造函数会自动执行。因为一个类可能会有包括默认构造函数在内的不止一种构造函数,下面讨论如何调用特定的构造函数。在这种情况下,会执行默认的构造函数,从而将sa的数据成员初始化为0。如果参数的类型和顺序不与任何构造函数相匹配,则C++将使用类型转换并寻找最佳匹配。......
2023-11-07
析构函数被系统自动调用分两种情况。分析以下程序的执行结果。解:本程序执行结果如下:调用带参构造函数矩形s1的面积=153调用无参构造函数矩形s2的面积=0调用了析构函数!......
2023-11-07
在C语言中,以函数首部声明函数的形式称为函数原型。使用函数原型是C语言的一个重要特征,主要作用是利用它在程序的编译阶段对调用函数的合法性进行全面检查。......
2023-11-18
运算符重载函数的调用格式与普通成员函数的调用格式类似,以双目运算符重载成员函数为例,其调用格式如下:左运算对象双目运算符右运算对象例如:对于前面的Complex,设计如下主函数:其中,“s3=s1+s2;”和“s4=s1-s2;”两个语句就是调用运算符重载函数。该函数执行完毕,释放tmp对象。......
2023-11-07
类模板的成员函数被认为是函数模板,也称为类属函数。因此,当给出一个类模板的成员函数的定义时,必须遵循函数模板的定义。在类模板中,可以用类型参数名表示数据成员的类型,也可以表示成员函数返回值、形参和局部变量的类型。类模板定义中的类型参数可带默认值。说明以下类模板的功能。......
2023-11-07
当一个实际的函数调用,它既可以和一个重载函数相匹配或是参数转换后与某一重载函数相匹配,又可以与某一模板函数相匹配,这并不会产生二义性。只是调用哪一个需按照一定的规则安排先后次序。在失败后,寻找一个函数模板,使其实例化,产生一个匹配的模板函数,若找到了,就调用它。......
2023-11-07
声明函数模板的一般格式如下:template<模板参数表>函数返回值类型函数模板名(形参表)函数模板定义由关键字template开头,表示声明一个模板。模板参数表写在尖括号<>中,参数一般由关键字class或typename后加一个标识符构成。Class和typename的意义相同,表示后面的标识符是一个参数类型,代表一个潜在的标准类型或用户定义的类型。例如,定义max函数模板求两个数中的较大者。如下面的声明是错误的:可以看出,用函数模板比函数重载更方便,程序更简洁。......
2023-11-07
内联函数不能是虚函数,因为内联函数是不能在运行中动态确定其位置的。即使虚函数在类的内部定义,编译时仍将其看作是非内联的。声明虚析构函数的目的在于:使用delete运算符删除一个对象时,能确保析构函数被正确地执行。如果不相同,则被派生类虚函数的参数类型强制转换为基类中虚函数的参数类型。......
2023-11-07
相关推荐