面试题答案
一键面试函数重载
- 参数列表:函数重载要求函数名称相同,但参数列表(参数的个数、类型或顺序)必须不同。返回值类型可以相同也可以不同,但仅返回值类型不同不能构成函数重载。
- 示例:
#include <iostream>
// 函数重载示例
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
int main() {
std::cout << "整数相加: " << add(3, 5) << std::endl;
std::cout << "浮点数相加: " << add(3.5, 5.5) << std::endl;
return 0;
}
在上述示例中,两个add
函数名称相同,但参数类型不同,这就是函数重载。编译器会根据调用时传入的参数类型来决定调用哪个函数。
虚函数
- 参数列表:虚函数在基类和派生类中,函数原型(包括参数列表和返回值类型)必须完全相同(协变返回类型除外,即派生类虚函数返回基类虚函数返回类型的指针或引用)。
- 示例:
#include <iostream>
class Animal {
public:
virtual void speak() {
std::cout << "Animal speaks" << std::endl;
}
};
class Dog : public Animal {
public:
void speak() override {
std::cout << "Dog barks" << std::endl;
}
};
int main() {
Animal* animal1 = new Animal();
Animal* animal2 = new Dog();
animal1->speak();
animal2->speak();
delete animal1;
delete animal2;
return 0;
}
在上述示例中,Animal
类中的speak
函数是虚函数,Dog
类继承自Animal
并重写了speak
函数。这两个函数的参数列表和返回值类型都相同。当通过基类指针调用虚函数时,实际调用的是对象真正类型(运行时类型)的虚函数版本,实现了多态性。