Override 是指在基类中创建一个带有 virtual 关键字的方法,并且基类允许子类
为它自己制作一个相同方法的主体。
Overwrite 的意思是 Override 没有 virtual 关键字。
重载的意思是用同一个名字创建多个输入参数不同的方法。
样本:
#include <stdio.h>
#include <stdlib.h>
class par_overwrite
{public: par_overwrite() {}; ~par_overwrite() {};
int at() { return 1; };
};
class chld_overwrite :public par_overwrite
{public: chld_overwrite() {}; ~chld_overwrite() {};
int at() { return 2; }//overwrite
};
void main_overwrite()
{
par_overwrite pt;
int ptat = pt.at();
chld_overwrite ct;
int ctat = ct.at();
printf("ptat:%d,ctat:%d\n",ptat, ctat); //output : ptat:1,ctat:2
}
class par_override
{public: par_override() {}; ~par_override() {};
virtual int ad() { return 3; };
};
class chld_override :public par_override
{public: chld_override() {}; ~chld_override() {};
int ad() { return 4; }//override
};
void main_override()
{
par_override pd;
int pdad = pd.ad();
chld_override cd;
int cdad = cd.ad();
printf("pdad:%d,cdad:%d\n", pdad, cdad); //output : pdad:3,cdad:4
}
class par_override_pure
{public: par_override_pure() {}; ~par_override_pure() {};
virtual int adp()=0;//Pure Virtual Function
};
class chld_override_pure :public par_override_pure
{public: chld_override_pure() {}; ~chld_override_pure() {};
int adp() { return 5; }//override from Pure Virtual Function
};
void main_override_pure()
{
//par_override_pure pdp;//error : Can not create object from abstract class that have (Pure Virtual Function)
//int pdpad = pdp.ad();//error
chld_override_pure cdp;
int cdpadp = cdp.adp();
printf("cdpadp:%d\n", cdpadp); //output : cdpadp:5
}
class overload
{public: overload() {}; ~overload() {};
void method_overload(int prm1) { printf("ol1\t"); }
void method_overload(int prm1, int prm2) { printf("ol2\t"); }
void method_overload(int prm1, int prm2, int prm3) { printf("ol3\t"); }
void method_overload(double prm1) { printf("ol4\t"); }
void method_overload(double prm1, double prm2) { printf("ol5\t"); }
void method_overload(double prm1, double prm2, double prm3) { printf("ol6\t"); }
};
void main_overload()
{
overload ol;
ol.method_overload(1);
ol.method_overload(1, 1);
ol.method_overload(1, 1, 1);
ol.method_overload(0.1);
ol.method_overload(0.1, 0.1);
ol.method_overload(0.1, 0.1, 0.1); // output : ol1 ol2 ol3 ol4 ol5 ol6
}
int main()
{ main_overwrite();
main_override();
main_override_pure();
main_overload();
getchar();
return 0;
}
/* output:
ptat:1,ctat:2
pdad:3,cdad:4
cdpadp:5
ol1 ol2 ol3 ol4 ol5 ol6
*/