第二章 引用内联重载
一.选择题
1、适宜采用inline定义函数情况是(C)
A. 函数体含有循环语句
B. 函数体含有递归语句
C. 函数代码少、频繁调用
D. 函数代码多、不常调用
2、假定一个函数为A(int i=4, int j=0) {;}, 则执行“A (1);”语句后,i和j的值分别为(A)
A. 1和0
B. 1和4
C. 4和0
D. 4和1
3、下列有关重载函数的说法中正确的是(C)
A. 重载函数必须具有不同的返回值类型
B. 重载函数参数个数必须相同
C. 重载函数必须有不同的形参列表
D. 重载函数名可以不同
4、两个同名函数构成重载关系,以下那个选项不要求不同。B
A. 参数个数
B. 返回类型
C. 参数类型
D. 函数头后有无const
二.填空题
1、C++语言中如果调用函数时,需要改变实参或者返回多个值,应该采取__地址传递_____方式
2、执行下列代码
string str("HelloC++");
cout<
程序的输出结果是_C++__
3、下面是一个输入半径,输出其面积和周长的C++程序,在下划线处填上正确的语句。
#include
#define pi 3.14
____using namespace std_____;
int main()
{ double rad;
cout<<"rad=";
cin>>rad;
double l=2.0*pi*rad;
double s=pi*rad*rad;
cout<<"\n The long is:"<
cout<<"The area is:"<
4、程序实现大写字母转换成小写字母。
#include
int main()
{ char a;
_int i=32_____;
cin>>a;
if(_a<='z'&&a>='a'_____)
a=a+i;
}
5、执行下列代码
int i=230;
cout <<"i="<
程序的输出结果为_i=E6__。
三、编程题
3.1 有以下重载函数定义:
1 void f();
2 void f(int x);
3 void f(int m, int n);
4 void f(double d1, double d2=3.14);
则以下调用哪些是错误的,哪些可以并与那个函数匹配,编程验证
f(‘A’);2
f( 5 ) ;2
f( 5.5 );4
f(10, 20);3
f(10, 23.4)不行
f(10.8, 24.87)4
3.2 创建一个函数plus(),它把两个数值加在一起,返回它们的和,提供处理int、double和string类型的重载版本,测试它们是否能处理下面的调用
int n = plus(3,4);
double d = plus(3.2,4.2);
string s = plus(“he”, “llo”);
string s1 = “aaa” ; string s2 = “bbb”;
string s3 = plus(s1,s2);
思考:(1)给string版本的函数传送参数最有效的方式是什么?
给string版本的函数传递参数最有效的方式是使用const string&作为参数类型,这样可以避免不必要的拷贝构造和析构操作。
不能,类型不匹配,不能直接调用,因为没有定义接受一个int和一个double参数的重载函数。可以通过显式类型转换来调用,例如double d = plus(static_cast
代码:
#include
#include
int plus(int a, int b) {
return a + b;
}
double plus(double a, double b) {
return a + b;
}
std::string plus(const std::string& str1, const std::string& str2) {
return str1 + str2;
}
int main() {
int n = plus(3, 4);
double d = plus(3.2, 4.2);
std::string s = plus("he", "llo");
std::string s1 = "aaa";
std::string s2 = "bbb";
std::string s3 = plus(s1, s2);
std::cout << "n = " << n << std::endl;
std::cout << "d = " << d << std::endl;
std::cout << "s = " << s << std::endl;
std::cout << "s3 = " << s3 << std::endl;
return 0;
}