您的位置:首页 > 编程语言 > C语言/C++

C++覆盖、重载、多态区别

2013-01-12 16:41 162 查看
覆盖:

在基类中定义了一个非虚拟函数,然后在派生类中又定义了一个同名同参数同返回类型的函数,这就是覆盖了。

在派生类对象上直接调用这个函数名,只会调用派生类中的那个。

//coverage.cpp

#include<iostream>

usingnamespacestd;

classA

{

public:

voidShowMessage();

};

classB:publicA

{

public:

voidShowMessage();

};

voidA::ShowMessage()

{

cout<<"Hello,ThisisA./n";

return;

}

voidB::ShowMessage()

{

cout<<"Hello,ThisisB./n";

return;

}

intmain()

{

A*p;

Bmemb;

*p=memb;

p->ShowMessage();

memb.ShowMessage();

return0;

}

输出为:

Hello,ThisisA.

Hello,ThisisB.


重载:


有两个或多个函数名相同的函数,但是函数的形参列表不同。在调用相同函数名的函数时,根据形参列表确定到底该调用哪一个函数。

//reload

#include<iostream>

usingnamespacestd;

classA

{

public:

voidShowMessage();

voidShowMessage(stringstr);

};

voidA::ShowMessage()

{

cout<<"Hi,ThisisA./n";

return;

}

voidA::ShowMessage(stringstr)

{

cout<<str<<endl;

return;

}

intmain()

{

Amem;

mem.ShowMessage();

mem.ShowMessage("Hello.Howareyou?/n");

return0;

}

输出为:

Hi,ThisisA.

Hello.Howareyou?


多态:

在基类中定义了一个虚拟函数,然后在派生类中又定义一个同名,同参数表的函数,这就是多态。多态是这3种情况中唯一采用动态绑定技术的一种情况。也就是说,通过一个基类指针来操作对象,如果对象是基类对象,就会调用基类中的那个函数,如果对象实际是派生类对象,就会调用派声雷中的那个函数,调用哪个函数并不由函数的参数表决定,而是由函数的实际类型决定。

//poly.cpp

#include<iostream>

usingnamespacestd;

classA

{

public:

virtualvoidShowMessage();

};

classB:publicA

{

public:

voidShowMessage();

};

voidA::ShowMessage()

{

cout<<"ThisisA./n";

return;

}

voidB::ShowMessage()

{

cout<<"ThisisB./n";

return;

}

intmain()

{

A*p;

p=newA();

p->ShowMessage();

p=newB();

p->ShowMessage();

return0;

}

输出为:

ThisisA.

ThisisB.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: