析构函数被系统自动调用分两种情况。分析以下程序的执行结果。解:本程序执行结果如下:调用带参构造函数矩形s1的面积=153调用无参构造函数矩形s2的面积=0调用了析构函数!......
2023-11-07
当一个实际的函数调用,它既可以和一个重载函数相匹配或是参数转换后与某一重载函数相匹配,又可以与某一模板函数相匹配,这并不会产生二义性。只是调用哪一个需按照一定的规则安排先后次序。这些规则就是函数模板与同名的非模板函数的重载方法均遵循的约定:
(1)寻找一个参数完全匹配的函数,如果找到了就调用它。
(2)在(1)失败后,寻找一个函数模板,使其实例化,产生一个匹配的模板函数,若找到了,就调用它。
(3)在(1)、(2)均失败后,再试一试低一级的函数的重载方法,例如通过类型转换可产生参数匹配等,若找到了,就调用它。
(4)若以上均失败,则就是一个错误的调用。
【例5.6】分析以下程序的执行结果。
解:程序的执行结果如下:
int重载函数:max=12
int重载函数:max=51(www.chuimin.cn)
char重载函数:max=c
int重载函数:max=d
模板函数:max=22.45
在语句①中调用max(i1,i2),由于两个参数均为int型,按照上述规则,首先查找完全匹配的函数调用,找到了,因此调用intmax(int x,int y,int z=0)重载版本。
在语句②中调用max(i1,i2,i3),由于三个参数均为int型,按照上述规则,首先查找全匹配的函数调用,找到了,因此调用intmax(int x,int y,int z=0)重载版本。
在语句③中调用max(c1,c2),由于两个参数均为char型,按照上述规则,首先查找完全匹配的函数调用,找到了,因此调用charmax(char x,char y)重载版本。
在语句④中调用max(c1,c2,c3),由于三个参数均为char型,按照上述规则,首先查找完全匹配的函数调用,没有找到,再找函数模板,也没有找到,因此调用经过类型转换的intmax(int x,int y,int z=0)重载版本。
在语句⑤中调用max(f1,f2),由于两个参数均为double型,按照上述规则,首先查找完全匹配的函数调用,没有找到,再找函数模板,找到了,因此调用函数模板实例化的模板函数doublemax(double x,double y)版本。
有关C++程序设计基础教程的文章
析构函数被系统自动调用分两种情况。分析以下程序的执行结果。解:本程序执行结果如下:调用带参构造函数矩形s1的面积=153调用无参构造函数矩形s2的面积=0调用了析构函数!......
2023-11-07
运算符重载函数的调用格式与普通成员函数的调用格式类似,以双目运算符重载成员函数为例,其调用格式如下:左运算对象双目运算符右运算对象例如:对于前面的Complex,设计如下主函数:其中,“s3=s1+s2;”和“s4=s1-s2;”两个语句就是调用运算符重载函数。该函数执行完毕,释放tmp对象。......
2023-11-07
程序设计是指设计、编写和调试程序的方法与过程。由于程序是软件的本体,因此软件的质量主要通过程序的质量体现,因此,研究一种切实可行的程序设计方法至关重要。继承是面向对象程序设计方法的一个重要标志,利用继承机制可以大大提高程序的可重用性和可扩充性。......
2023-11-07
当定义类对象时,构造函数会自动执行。因为一个类可能会有包括默认构造函数在内的不止一种构造函数,下面讨论如何调用特定的构造函数。在这种情况下,会执行默认的构造函数,从而将sa的数据成员初始化为0。如果参数的类型和顺序不与任何构造函数相匹配,则C++将使用类型转换并寻找最佳匹配。......
2023-11-07
C++的基本数据类型有bool(布尔型)、char(字符型)、int(整型)、float(浮点型)、double。另外,C++中增加了一个布尔类型bool,其值为true(真)或false(假)。浮点数和整数不同的地方是浮点数有小数部分,如12.34。C++提供的5种基本数据类型,其数据的长度和范围会随处理器的类型和编译器类型的不同而异。C++的修饰符有short、long和signed、unsigned。表1.1大多数32位系统内置数据类型范围续表......
2023-11-07
声明函数模板的一般格式如下:template<模板参数表>函数返回值类型函数模板名(形参表)函数模板定义由关键字template开头,表示声明一个模板。模板参数表写在尖括号<>中,参数一般由关键字class或typename后加一个标识符构成。Class和typename的意义相同,表示后面的标识符是一个参数类型,代表一个潜在的标准类型或用户定义的类型。例如,定义max函数模板求两个数中的较大者。如下面的声明是错误的:可以看出,用函数模板比函数重载更方便,程序更简洁。......
2023-11-07
throw、try和catch语句的一般语法如下:throw表达式;异常处理的执行过程如下:程序通过正常的顺序执行到达try语句块,然后执行try块内受保护的语句。对于fun语句,其捕获异常的过程是相似的。只要找到一个匹配的异常类型,后面的异常处理都将被忽略。......
2023-11-07
在类声明中,public、private和protected是关键字,称为成员访问限定符,它们分别表示公有、私有和保护的成员访问权限。其他函数不能访问该类的保护数据成员,也不能调用该类的保护成员函数。◇一旦给出了成员访问限定符,它后面的成员都具有这个成员访问权限,直到出现另一个成员访问限定符或类声明结束为止。类的成员函数可以访问类的所有成员,没有任何限制,而类的对象对类的成员的访问是受成员访问控制符制约的。......
2023-11-07
相关推荐