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.
相关文章推荐
- C++学习笔记之覆盖、重载、多态的区别
- C++学习之多态及重载(overload),覆盖(override),隐藏(hide)的区别
- C++多态、重载和覆盖的区别
- C++多态及重载(overload),覆盖(override),隐藏(hide)的区别
- C++:区别覆盖,重载与多态(转)
- c++中多态函数以及函数重载,覆盖,遮蔽(隐藏)的区别
- C++覆盖、重载、多态区别 ; 重载、重写(覆盖)、重定义(隐藏)三者区别
- c++中多态函数以及函数重载,覆盖,遮蔽(隐藏)的区别
- **C++和JAVA中的多态区别以及与此相关的重载、覆盖和隐藏*
- C++学习之多态及重载(overload),覆盖(override),隐藏(hide)的区别
- 转---C++学习之多态及重载(overload),覆盖(override),隐藏(hide)的区别
- c++ 重载 覆盖 隐藏的区别和执行方式
- c++覆盖,重载,多态
- C++重写(覆盖)、重载、重定义、多态
- c++面向对象编程补充(一) 重载 覆盖 隐藏区别
- C++中重载、覆盖和隐藏的区别
- C++中重定义、重写、重载的区别以及隐藏与覆盖的访问
- c++ 重载 覆盖 隐藏的区别和执行方式
- C++中的重载,覆盖,隐藏与多态
- c++ 重载 覆盖 隐藏的区别和执行方式