C++ 和 Delphi 的函数覆盖(Override)与重载(overload)
Spacesoft【暗夜狂沙】
在面向对象编程中,当子类继承了来自基类的函数后,子类有可能需要对其中的一些函数作出与基类不同处理,比如:
class CHuman
{
public:
void SayMyName()//打印出对象的姓名
{
cout << "Hi, I am a human" << endl;
}
};
那么很明显,假如他的子类有一个同名、同参数和返回值(一句话,一摸一样)的函数SayMyName,它会调用哪个函数呢?比如现在有一个class CMark
class CMark: public CHuman
{
public:
void SayMyName()
{
cout << "Hi, I am mark" << endl;
}
};
那么我们要问,下面的程序段:
CHuman *pH = new CMark;
if (pH)
pH->SayMyName();
else
cout << "cast error! " << endl;
delete pH;
pH = NULL;
Spacesoft【暗夜狂沙】
在面向对象编程中,当子类继承了来自基类的函数后,子类有可能需要对其中的一些函数作出与基类不同处理,比如:
class CHuman
{
public:
void SayMyName()//打印出对象的姓名
{
cout << "Hi, I am a human" << endl;
}
};
那么很明显,假如他的子类有一个同名、同参数和返回值(一句话,一摸一样)的函数SayMyName,它会调用哪个函数呢?比如现在有一个class CMark
class CMark: public CHuman
{
public:
void SayMyName()
{
cout << "Hi, I am mark" << endl;
}
};
那么我们要问,下面的程序段:
CHuman *pH = new CMark;
if (pH)
pH->SayMyName();
else
cout << "cast error! " << endl;
delete pH;
pH = NULL;