函数重载(在编译时实现)
它通过更改签名来提供函数的多种定义,即更改参数数量,更改参数数据类型,返回类型不起作用。
- 它既可以在基类中也可以在派生类中完成。
- 例子:
void area(int a); void area(int a, int b);
// CPP program to illustrate
// Function Overloading
#include
using namespace std;
// overloaded functions
void test(int);
void test(float);
void test(int, float);
int main()
{
int a = 5;
float b = 5.5;
// Overloaded functions
// with different type and
// number of parameters
test(a);
test(b);
test(a, b);
return 0;
}
// Method 1
void test(int var)
{
cout << "Integer number: " << var << endl;
}
// Method 2
void test(float var)
{
cout << "Float number: "<< var << endl;
}
// Method 3
void test(int var1, float var2)
{
cout << "Integer number: " << var1;
cout << " and float number:" << var2;
}
输出:
Integer number: 5
Float number: 5.5
Integer number: 5 and float number: 5.5
函数覆盖(在运行时实现)
它是基类函数在具有相同签名(即返回类型和参数)的派生类中的重新定义。
- 它只能在派生类中完成。
- 例子:
Class a { public: virtual void display(){ cout << "hello"; } } Class b:public a { public: void display(){ cout << "bye";}; }
// CPP program to illustrate
// Function Overriding
#include
using namespace std;
class BaseClass
{
public:
virtual void Display()
{
cout << "\nThis is Display() method"
" of BaseClass";
}
void Show()
{
cout << "\nThis is Show() method "
"of BaseClass";
}
};
class DerivedClass : public BaseClass
{
public:
// Overriding method - new working of
// base class's display method
void Display()
{
cout << "\nThis is Display() method"
" of DerivedClass";
}
};
// Driver code
int main()
{
DerivedClass dr;
BaseClass &bs = dr;
bs.Display();
dr.Show();
}
输出:
This is Display() method of DerivedClass
This is Show() method of BaseClass
函数重载VS函数重载
- 继承:当一个类从另一类继承时,会发生函数重写。没有继承就可能发生重载。
- 函数签名:重载函数的函数签名必须不同,即参数数量或参数类型应不同。在覆盖中,函数签名必须相同。
- 功能范围:覆盖的功能在不同的范围内;而重载函数在相同的范围内。
- 函数的行为:当派生类函数必须执行一些与基类函数相比增加或不同的工作时,需要重写。重载用于具有相同名称的函数,这些函数的行为取决于传递给它们的参数。
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。