c++ virtual函数使用

2017-03-09  本文已影响434人  HenryTien

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;
}
上一篇下一篇

猜你喜欢

热点阅读