Wednesday, June 27, 2007
Sunday, June 24, 2007
C++中的多态的底层机制
面向对象程序设计语言的一个特性就是多态。在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()函数
看下面的例子:
基类:
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()函数
Saturday, June 23, 2007
今天上午考四级,大家都说时间不够,我倒是还好。晚饭和禽兽去外面吃饭,喝喝酒,乱七八糟的闲聊,回到寝室,只有一个人,并且此人马上也出发去学习了。这个学期,应该说我还是比较用功的,但一到考试那段时间就堕落了。可能会挂一二门吧,也好,反正我还没尝过挂科的滋味。不过,我这样说是否就已经表明我事实上还是对挂科这事比较在意的呢?
不知道是不是因为很久没喝酒,头晕的有点,还是因为有点轻微感冒?有时如果你觉得你找不到方向了,那么就做那些和你厌恶的人做的相反的事情,那样你就能找到你的道路。我最近总是这样想,因为我发现我好像就是这么做的。很久没有一个人有什么心情坐下来听听歌,想想了。我想我是个有病的人,高一时我老这么想,后来就没怎么想了,现在突然觉得我就是个有病的人,或许应该找叉叉看看病了。我想我是学不会宽容,我就是那种有仇报仇,有冤报冤的那种人。我觉得自己可能是因为缺乏安全感才这么依赖一个可以全心倾注的人,而这种非安全感又来源于自己的弱小。所以只有自己变的强大,这种非安全感自然就会消失。当然,对此,我一如即往的没有自信。
不知道是不是因为很久没喝酒,头晕的有点,还是因为有点轻微感冒?有时如果你觉得你找不到方向了,那么就做那些和你厌恶的人做的相反的事情,那样你就能找到你的道路。我最近总是这样想,因为我发现我好像就是这么做的。很久没有一个人有什么心情坐下来听听歌,想想了。我想我是个有病的人,高一时我老这么想,后来就没怎么想了,现在突然觉得我就是个有病的人,或许应该找叉叉看看病了。我想我是学不会宽容,我就是那种有仇报仇,有冤报冤的那种人。我觉得自己可能是因为缺乏安全感才这么依赖一个可以全心倾注的人,而这种非安全感又来源于自己的弱小。所以只有自己变的强大,这种非安全感自然就会消失。当然,对此,我一如即往的没有自信。
Thursday, June 07, 2007
Flickr,这次轮到你了
虽然我不常用Flickr(www.flickr.com)的服务,但我一直觉得它是一个很好的在线相册。但是现在它也被伟大的GFW给盯上了。我真是想不通中国的管理层在想什么,但我想通了一件事,那就是为什么中国的人才流失会这么严重。6.4.刚刚过去,我知道了解这件事的人是少数,但现在是网络时代,你能封得了一时,封不了一世,我相信越来越多的人会了解越来越多的事。我承认GFW实在很牛,但我照样能突破你。人才总是会想要自由,民主,话语权,所以他们会选择美国。
因为我觉得我是人才,所以我想我要准备考GRE了。
因为我觉得我是人才,所以我想我要准备考GRE了。
Subscribe to:
Posts (Atom)