重载 重定义 重写

重载 重定义 重写_第1张图片
重载 重定义 重写

重载(overload)

重载函数是函数的一种特殊情况。
为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,
但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个运算符完成不同的运算功能。
这就是重载函数。
重载函数常用来实现功能类似而所处理的数据类型不同的问题。

// overload
class H
{
public:
    int    add(int    i, int    j);
    double add(double i, double j);
};

int H::add(int i, int j)
{
    return i + j;
}

double H::add(double i, double j)
{
    return i + j;
}

...
    H h;
    cout<<"h.add(2, 3)     : "<
result

重定义(隐藏)

派生类的函数屏蔽了与其同名的基类函数。
注意只要同名函数,不管参数列表是否相同,基类函数都会被隐藏。
子类重新定义父类中有相同名称的非虚函数 ( 参数列表可以不同 ) 。
重定义后子类调用的函数是子类自己的函数,父类的函数会被隐藏。名字隐藏特性。
如果想调用父类的该同名函数,需要用父类加上作用域来指定调用的函数。

class I
{
public:
    int    add(int    i, int    j);
};

int I::add(int i, int j)
{
    int k = i + j;

    cout<<"call I::add(int i, int j). result : "<
class J : public I
{
public:
    int add(int i, int j);
};
>
int J::add(int i, int j)
{
    int k = i + j;

    cout<<"call J::add(int i, int j). result : "<add(1, 2);
result

重写(override)

派生类中存在重新定义的函数。
其函数名,参数列表,返回值类型,所有都必须同基类中被重写的函数一致
只有函数体不同(花括号内),派生类调用时会调用派生类的重写函数,不会调用被重写函数。
重写的基类中被重写的函数必须有virtual修饰。

// override
class K
{
public:
    virtual int add(int i, int j);
};

int K::add(int i, int j)
{
    int k = i + j;

    cout<<"call K::add(int i, int j). result : "<add(1, 2);

    L l;
    pk = &l;
    pk->add(1, 2);

    M m;
    pk = &m;
    pk->add(1, 2);
result

References:

http://www.jb51.net/article/54225.htm
http://www.cnblogs.com/qlee/archive/2011/07/04/2097055.html
http://www.oschina.net/question/234345_48772

你可能感兴趣的:(重载 重定义 重写)