原来多态是这样子的!

多态
什么是多态(Polymorphism)?按字面的意思就是“多种形状”。引用Charlie Calverts对多态的描述——多
态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前
赋值给它的子对象的特性以不同的方式运作(摘自“Delphi4 编程技术内幕”)。简单的说,就是一句
话:允许将子类类型的指针赋值给父类类型的指针。多态性在Object Pascal和C++中都是通过虚函数
(Virtual Function) 实现的。
多态性是允许将父对象设置成为和一个和多个它的子对象相等的技术,比如Parent:=Child;

赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。也就是说,父亲的行为像儿
子,而不是儿子的行为像父亲。
举个例子:从一个基类中派生,响应一个虚命令,产生不同的结果。
比如从某个基类继承出多个对象,其基类有一个虚方法Tdoit,然后其子类也有这个方法,但行为不同,然
后这些子对象中的任何一个可以附给其基类的对象,这样其基类的对象就可以执行不同的操作了。实际上你
是在通过其基类来访问其子对象的,你要做的就是一个赋值操作。
使用继承性的结果就是可以创建一个类的家族,在认识这个类的家族时,就是把导出类的对象 当作基类的
的对象,这种认识又叫作upcasting。这样认识的重要性在于:我们可以只针对基类写出一段程序,但它
可以适 应于这个类的家族,因为编译器会自动就找出合适的对象来执行操作。这种现象又称为多态性。而
实现 多态性的手段又叫称动态联编(dynamic binding)。
简单的说,建立一个父类的变量,它的内容可以是这个父类的,也可以是它的子类的,当子类拥有和父类同
样的函数,当使用这个变量调用这个函数的时候,定义这个变量的类,也就是父类,里的同名函数将被调
用,当在父类里的这个函数前加virtual关键字,那么子类的同名函数将被调用
class A {
public:
A() {}
virtual void foo() {
cout << "This is A." << endl;
}
};
class B : public A {
public:
B() {}
void foo() {
cout << "This is B." << endl;
}
};
int main(int argc, char* argv[]) {
A *a = new B();
a->foo();
return 0;
}
这将显示:
This is B.
如果把virtual去掉,将显示:
This is A.
回头想想,当初也使用过多态这个特性,最常见的employee, manager, secretary
#include
using namespace::std;
class Employee{
public:
Employee(){}
virtual void print(){}
};
class Manager : public Employee{
public:
Manager(){}
void print(){
cout<<"this is Manager"<
}
};
class Secretary : public Employee{
public:
Secretary(){}
void print(){
cout<<"this is Secretary"<
}
};
int main(){
Employee * e[2];
e[0]= new Manager();
e[1]= new Secretary();
for(int i=0;i<2;i++){
e[i]->print();
}
}
输出:
this is Manager
this is Secretary
请按任意键继续. . .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值