面向对象程序设计语言的一个特性就是多态。在C++中,多态是由虚函数(virtual)来实现的。
看下面的例子:
基类:
class Fuck {
public:
Fuck();
void action(){
cout <<"Be fucked"<< endl
};
};
派生类:
class FuckYourMother : Fuck{
public:
FuckYourMother();
void action(){
cout << "Your mother's been fucked"<< endl
};
};
int main()
{
Fuck *a = new FuckYourMother();
a->action();
return 0;
}
上面的程序并不会实现多态,程序的运行结果是:Be fucked
如果要实现多态只要在需要的实现多态的那个函数前加关键字virtual。
class Fuck {
public:
Fuck();
virtual void action(){
cout <<"Be fucked"<< endl
};
};
派生类:
class FuckYourMother : Fuck{
public:
FuckYourMother();
void action(){
cout << "Your mother's been fucked"<< endl
};
};
int main()
{
Fuck *a = new FuckYourMother();
a->action();
return 0;
}
在底层,多态的实现是依靠一个叫VTABLE的东东的,每个类都会建立一个VTABLE,比如在上面的例子中,基类Fuck的VTABLE应该是如下形式:
编号 函数地址
1 Fuck()的函数地址
2 void action()的地址
FuckYourMother类的VTABLE应该是:(如果这个类中没有定义void action()函数)
编号 函数地址
1 FuckYourMother()的地址
2 这里会复制基类中void action()函数的地址。
FuckYourMother类的VTABLE应该是:(如果这个类中自己定义了void action()函数)
编号 函数地址
1 FuckYourMother()的地址
2 这里会override基类中的void action()函数
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment