perhaps 发表于 2013-2-5 02:43:18

关于虚函数的两个例子

晚上看了半天的COM,而里面又是满篇的虚函数。尽管自己对于虚函数有一定的了解,但是远离C++也有一些时日,看来补补课是很有必要的了。
        打开自己收藏夹,目光停留在周星星老大经常出没的地方:vcKBase。于是,从这个宝库中找到了自己需要的两篇文章:C++中的虚函数(一)和C++实践系列>C++中的虚函数(virtual function)。
        两篇文章都写得不错,尤其是第二篇,写得很有分量,让人收益非浅。而第一篇通过列举的方式将虚函数的特点一一道来也很不错,美中不足的就是作为范例的代码有些瑕疵了。现列举如下:
        1、文章中的第五点通过以下代码以说明多态性: <div style="padding-right: 5.4pt; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; width: 98%; padding-top: 4px;">http://www.agoit.com/Images/OutliningIndicators/ExpandedBlockStart.gifhttp://www.agoit.com/Images/OutliningIndicators/ContractedBlock.gifclass A http://www.agoit.com/Images/dot.gif{
http://www.agoit.com/Images/OutliningIndicators/InBlock.gifpublic:
http://www.agoit.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.agoit.com/Images/OutliningIndicators/ContractedSubBlock.gif    virtual void f() http://www.agoit.com/Images/dot.gif{ cout << "A::f" << endl; }
http://www.agoit.com/Images/OutliningIndicators/ExpandedBlockEnd.gif};
http://www.agoit.com/Images/OutliningIndicators/ExpandedBlockStart.gifhttp://www.agoit.com/Images/OutliningIndicators/ContractedBlock.gifclass B :public Ahttp://www.agoit.com/Images/dot.gif{
http://www.agoit.com/Images/OutliningIndicators/InBlock.gifpublic:
http://www.agoit.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.agoit.com/Images/OutliningIndicators/ContractedSubBlock.gif    virtual void f() http://www.agoit.com/Images/dot.gif{ cout << "B::f" << endl;}
http://www.agoit.com/Images/OutliningIndicators/ExpandedBlockEnd.gif};
http://www.agoit.com/Images/OutliningIndicators/ExpandedBlockStart.gifhttp://www.agoit.com/Images/OutliningIndicators/ContractedBlock.gifclass C :public A http://www.agoit.com/Images/dot.gif{
http://www.agoit.com/Images/OutliningIndicators/InBlock.gifpublic:
http://www.agoit.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.agoit.com/Images/OutliningIndicators/ContractedSubBlock.gif    virtual void f() http://www.agoit.com/Images/dot.gif{ cout << "C::f" << endl;}
http://www.agoit.com/Images/OutliningIndicators/ExpandedBlockEnd.gif};
http://www.agoit.com/Images/OutliningIndicators/ExpandedBlockStart.gifhttp://www.agoit.com/Images/OutliningIndicators/ContractedBlock.gifclass Drive : public C http://www.agoit.com/Images/dot.gif{
http://www.agoit.com/Images/OutliningIndicators/InBlock.gifpublic:
http://www.agoit.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.agoit.com/Images/OutliningIndicators/ContractedSubBlock.gif    virtual void f() http://www.agoit.com/Images/dot.gif{ cout << "D::f" << endl;}
http://www.agoit.com/Images/OutliningIndicators/ExpandedBlockEnd.gif};
http://www.agoit.com/Images/OutliningIndicators/None.gif
http://www.agoit.com/Images/OutliningIndicators/None.gifint main(int argc, char* argv[])
http://www.agoit.com/Images/OutliningIndicators/ExpandedBlockStart.gifhttp://www.agoit.com/Images/OutliningIndicators/ContractedBlock.gifhttp://www.agoit.com/Images/dot.gif{
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif    A a;
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif    B b;
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif    C c;
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif    Drive d;
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif    a.f();
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif    b.f();
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif    c.f();
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif    d.f();
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif    return 0;
http://www.agoit.com/Images/OutliningIndicators/ExpandedBlockEnd.gif}
http://www.agoit.com/Images/OutliningIndicators/None.gif
页: [1]
查看完整版本: 关于虚函数的两个例子