美文网首页
c++ virtual函数使用

c++ virtual函数使用

作者: HenryTien | 来源:发表于2017-03-09 22:07 被阅读434次

    Why use virtual functions? [duplicate]

    当要操作多个对象的时候,可以在派生类中自定义基类的成员函数,这样便于更加灵活方便的使用接口(自定义的感觉)
    你的基类是一个形状,派生类有矩形 三角形 圆形 ,你想画出这些形状,这个时候,你可以抽象定义一个画图形的这个函数为基类,并加上virtual,然后在派生类中你就可以自定实现各种图形的功能啦,如果没有,可能基类定义的是画矩形的,并不适用画三角形哦。

    在派生类中对virtual 函数直接赋值为0,这样变欧式我们定义了一个抽象类。

    来看看代码吧;

    class Shape
        {
            public:
               virtual void draw() = 0;
               virtual ~Shape() {}
        };
    
        class Rectange: public Shape
        {
            public:
                void draw() { // draw rectangle here } 
        };
    
    
        class Circle: public Shape
        {
            public:
               void draw() { // draw circle here }
        };
    Now you can have vector of different shapes:
    
        vector<Shape*> shapes;
        shapes.push_back(new Rectangle());
        shapes.push_back(new Circle());
    And you can draw all shapes like this:
    
        for(vector<Shape*>::iterator i = shapes.begin(); i != shapes.end(); i++)
        {
              (*i)->draw();
        }
    
    
    #include <iostream>
    using namespace std;
    class A
    {
    public:
        A(int xp = 0) {
            x = xp;
        }
        void SetX(int xp) {
            x = xp;
        }
        void print() {
            cout << "this is x in A" << endl;
        }
    private:
    protected:
        int x;
    };
    
    class B :virtual public A {  // B 由A虚基类派生而来
    
    };
    class C :virtual public A {
    
    };
    
    class D :public C, public B {
    
    };
    
    int main() {
        D d;
        d.SetX(5);
        d.print();
    
        d.A::print();
        d.B::print();
        d.C::print();
        system("pause");
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:c++ virtual函数使用

          本文链接:https://www.haomeiwen.com/subject/lxeigttx.html