重载:重载是指在一个类或者作用域中可以出现多个函数名相同参数不同的函数,重载可以分为函数重载和运算符载
函数重载实例:
#include <iostream>
using namespace std;
//比较两个int型数的大小,并且返回最大的数
int max(int a, int b)
{
int c;
c = (a > b) ? a : b;
return c;
}
//比较两个double型数的大小,并且返回最大的数
double max(double a, double b)
{
double c;
c = (a > b) ? a : b;
return c;
}
//比较两个字符的大小,并且返回最大的字符
char max(char a, char b)
{
char c;
c = (a > b) ? a : b;
return c;
}
void main()
{
cout<<"最大的int型数:"<<max(123, 23)<<endl;
cout<<"最大的double型数:"<<max(1.23, 2.3)<<endl;
cout<<"最大的字符:"<<max('a', 'z')<<endl;
system("pause");
}
执行结果:
说明:
上面的程序中使用了三个max函数,三个函数的函数名相同,函数的参数不同,这就是函数重载的运用
运算符重载:就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型
至于运算符重载我在前面已经写了一些博客,详情可以看:
设计String类,并且在String类中使用运算符重载 http://blog.csdn.net/u010105970/article/details/30253771
在运算符重载中使用友元函数http://blog.csdn.net/u010105970/article/details/30025343
使用运算符重载实现复数的四则运算http://blog.csdn.net/u010105970/article/details/30022851
使用运算符重载实现复数的加法运算http://blog.csdn.net/u010105970/article/details/29855667
设计CTime类在CTime类中使用运算符重载http://blog.csdn.net/u010105970/article/details/30460881
重载<<和>>http://blog.csdn.net/u010105970/article/details/31395025
通过重载输入和输出运算符实现复数的输入和输出 http://blog.csdn.net/u010105970/article/details/31402615
在复数类中自定义类型转换函数实现复数和非复数之间的运http://blog.csdn.net/u010105970/article/details/31734497
在CTime类中重载<<和>> http://blog.csdn.net/u010105970/article/details/31745291
在类中使用函数重载:
#include <iostream>
using namespace std;
class Parent
{
public:
void func()
{
cout<<"类中的 void func()"<<endl;
}
void func(int i)
{
cout<<"类中的 void func(int i)"<<endl;
}
void func(int i, int j)
{
cout<<"类中的 void func(int i, int j)"<<endl;
}
};
int main()
{
Parent p;//定义一个类对象
p.func();
p.func(1);
p.func(1,2);
system("pause");
}
执行结果:
说明:
通过这个例子说明函数重载不仅适用于作用域中,在类中也适用
重写:当一个子类继承一父类,而子类中的方法与父类中的方法的名称,参数个数、类型都完全一致时,就称子类中的这个方法重写了父类中的方法
代码示例:
#include <iostream>
using namespace std;
class Parent//父类
{
public:
void func()
{
cout<<"父类中的 void func()"<<endl;
}
virtual void func(int i)
{
cout<<"父类中的 void func(int i)"<<endl;
}
virtual void func(int i, int j)
{
cout<<"父类中的 void func(int i, int j)"<<endl;
}
};
class Child : public Parent
{
public:
virtual void func(int i, int j)
{
cout<<"子类中的 void func(int i, int j)"<<endl;
}
virtual void func(int i, int j, int k)
{
cout<<"子类中的 void func(int i, int j, int k)"<<endl;
}
};
void main()
{
Child c;
c.func(1,2);
c.func(1,2,3);
system("pause");
}
执行结果:
说明:
6、如果父类中没有virtual关键字,这种父子之间的关系 重定义 (静态链编)
7、如果父类中有virtual关键字,这种父子之间的关系叫做虚函数重写,这种情况下发生多态 (动态链编 迟绑定)