一、定义
重载:重载指的是在同一个类中发生的,两个成员函数拥有相同的名称,但是他们的参数不一样。
但是不能通过返回类型来判断。
重定义:重定义也叫隐藏。它是发生的子类父类中的,即它的发生条件是继承。子类重新定义和父
类相同的函数他们的参数列表可以不同。(重定义的是父类的非虚函数)
重写:也叫覆盖。它也是发生在子类中的,即它发生的条件也是继承关系。当我们对别人提供的方
法不满意时,我们可以通过继承这个类然后将其方法改成我们需要的逻辑。
(1)、被重写的函数不能是static的。
(2)、函数的三要素(函数名、函数参数、函数返回值)完全一样。
(3)、virtual函数重新是多态产生的必要条件之一。
二、应用
重载:
重载可以通过调用相同的函数名来实现不同数据类型的运算。
class A
{
public :
int a ;
char b[10];
void get_a(int &a)
{
this->a = a;
printf("%d",this->a);
}
void get_a(const char *c)
{
strcpy(this->b,c);
printf("%s",this->b);
}
};
int main()
{
int a= 10;
const char *b= "sos";
A d;
d.get_a(b);
d.get_a(a);
}
重定义(也叫隐藏):
class A
{
public :
int a ;
void get_a(int &b)
{
this->a = b;
printf("%d",this->a);
}
};
class b :public A
{
public :
char b[10] ;
void get_a(const char *p)
{
strcpy(this->b,p);
printf("%s",this->b);
}
};
int main()
{
int a=2;
const char *p ="lucifer";
b c;
c.get_a(p);
//c.get_a(a); //此时这句话会报错说明是否参数类型的改变,默认调用子类的函数
c.A::get_a(a); //这是父类函数的调用方法
}
重写:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
class A
{
public :
int a ;
virtual void get_a(int &b)
{
this->a = b;
printf("%d",this->a);
printf("这是父类函数");
}
};
class b:public A
{
public :
int b;
virtual void get_a(int &c)
{
this->b = c;
printf("%d",this->b);
printf("这是子类函数");
}
};
int main()
{
int a=1;
A *p = NULL;
b c;
p = &c;
p->get_a(a); //这个函数的调用取决于父类函数有无virtual修饰,若有则调用子类的,否则调用父类的。
}
上面这个其实就产生了多态,不过我会专门去说说多态。
!欢迎各位来指出不足之处