C++赋值兼容规则与函数重载详解

需积分: 10 1 下载量 130 浏览量 更新于2024-08-19 收藏 2.77MB PPT 举报
在C++编程中,理解赋值兼容规则与函数特性对于编写高效且健壮的代码至关重要。首先,关于赋值兼容性,当涉及到基类(Base)和派生类(Derive)的对象时,允许将派生类的对象赋值给基类对象,但反过来则不允许,因为这可能导致数据丢失或基类对象无法访问派生类新增的成员。例如: ```cpp Base b; Derive d; b = d; // 只会将Base类继承的成员赋值给b,不会包含Derive类特有的内容 ``` 另一方面,C++支持具有缺省参数值的函数,这是为了提供默认行为,减少调用时的繁琐。如`fac()`函数,如果用户没有提供参数,它将使用默认值2。在调用时,明确传递参数会覆盖默认值: ```cpp int fac(int n = 2) { int t = 1; for (int i = 1; i <= n; i++) t = t * i; return t; } // 输出示例 cout << fac(6) << endl; // 720 cout << fac() << endl; // 2 (使用默认值) ``` 使用具有缺省参数的函数时需要注意以下几点: 1. 缺省参数应在函数声明时指定,且不能放在参数列表的左边。 2. 函数原型说明时可以省略参数名,但实际调用时必须提供。 3. 在函数原型中设置了缺省值后,后续函数定义中不能再有相同的缺省值。 函数重载是C++中的一个重要概念,允许具有相同名称但参数列表不同的函数执行不同的操作。编译器根据实参类型和数量来决定调用哪个版本。例如: ```cpp int fun(int a, int b) { return a + b; } int fun(int a) { return a * a; } // 输出示例 cout << fun(3, 5) << endl; // 8 (两个整数相加) cout << fun(5) << endl; // 25 (一个整数自乘) ``` 重载函数的关键在于参数的不同,仅返回值的差异不足以构成重载。此外,定义的重载函数必须满足至少有一个参数的不同,无论是类型还是数量。