函数重载
函数不以返回值来区分重载函数
函数不以参数名来区分重载函数
使用重载函数的时候不要引起二义性
结构函数也可以重载
函数重载又叫编译时多态
int square(int x)
{
cout<<__FILE__<<__func__<<__LINE__<<endl;
return x*x;
}
float square(float x)
{
cout<<__FILE__<<__FUNCTION__<<__LINE__<<endl;
return x*x;
}
double square(double x)
{
cout<<__FILE__<<__func__<<__LINE__<<endl;
return x*x;
}
多态:运行时多态
定义一个基类的指针,指向子类的变量
class Shape {
protected:
int width, height;
public:
Shape( int a=0, int b=0)
{
width = a;
height = b;
}
// 虚函数
virtual int area()
{
cout << "Parent class area :" <<endl;
return 0;
}
// virtual int area() = 0;
// 纯 虚函数 = 0 告诉编译器 没有主题 因为实现多态 一般不需要实现父类中的虚函数
};
class Rectange : public Shape{
public:
Rectange (int a = 0, int b= 0) : Shape(a, b){
}
int area(){
cout << "Rectangle class area :" <<endl;
return (width * height);
}
};
class Triangle : public Shape{
public:
Triangle (int a = 0, int b= 0):Shape(a, b){
}
int area(){
cout << "Triangle class area :" <<endl;
return (width * height);
}
};
// 使用
Shape *shape;
Rectange rec(10, 7);
Triangle tri(20, 8);
// 存储正方形的 地址
// 调用的是 矩形的求面积公式
shape = &rec;
shape->area();
// 调用的三角形的求面积方法
shape = &tri;
shape->area();
// 如果基类中没有用virtual修饰, 那么 调用的就是基类中的 area方法了