zoukankan      html  css  js  c++  java
  • C++编程中虚函数的作用

        老鸟级的C++编程高手我想都掌握了虚函数的作用(哇,我没说自己是老鸟),但新手我想定是看虚函数一章有点头疼,或看懂了但在实际中用不出来,别急,让我来说上一回。

    何为虚函数?虚函数就是被关键字virtaul说明的函数。

    举个例子:

    这个例子中WindowBWindowC不同时存在,这在实际应用中是常有的情况,为了节省内存。

    class WindowA

    {

    public:

          virtual void Draw(){};

    };

     

    class WindowB:public WindowA

    {

    public:

        WindowB(){};

        void Draw();

    };

    class WindowC:public WindowA

    {

    public:

       WindowC(){};

       void Draw();

    };

     

    void WindowB::Draw()

    {

    画一个圆;

    }

    void WindowC::Draw()

    {

    画一个正方形;

    }

    当在定义WindowA时,不确定它的派生类WindowBWindowCDraw函数中要画什么,这时把Draw定义成虚函数,在派生类中具体实现。

    说到这,读者会问:那我把DrawWindowBWindowC中写好,还会少写一个类WindowA

    是的,是少写了,如你所说,你会如此使用:

    WindowB* b = new WindowB;

    b->Draw(); //画个圆

    delete b;

    WindowC* c = new WindowC;

    c->Draw(); //画个正方形

    delete c;

    我这里用指针实现,在上面的代码中,bc是两个独立的对象的指针。但如果派生类不是一两个,而是几十个,几百个,那你该怎么办呢?在头文件中定义几百个变量?

    非也,到时候用虚函数的作用了:

    WindowA* a = new WindowsB;

    a->Draw();   //画个圆,此处调用了WindowB中的Draw函数实现

    ifa

    delete a; //new 出来的一定要delete

    WindowA* a=new WindowC;

    a->Draw(); //画个正方形,此处调用了WindowC中的Draw函数实现

    ifa

    delete a;

    在上面的代码中,a实现了一个中转变量的作用,只要是从WindowA派生的,我都能赋值给a,而bc都是临时变量。再来多少个WindowA的派生类都没问题了,我只要在头文件中定义一个WindowA的指针变量就行了。
  • 相关阅读:
    51 Nod 1086 多重背包问题(单调队列优化)
    51 Nod 1086 多重背包问题(二进制优化)
    51 Nod 1085 01背包问题
    poj 2559 Largest Rectangle(单调栈)
    51 Nod 1089 最长回文子串(Manacher算法)
    51 Nod N的阶乘的长度 (斯特林近似)
    51 Nod 1134 最长递增子序列(经典问题回顾)
    51 Nod 1020 逆序排列
    PCA-主成分分析(Principal components analysis)
    Python中cPickle
  • 原文地址:https://www.cnblogs.com/goodcandle/p/241478.html
Copyright © 2011-2022 走看看