zoukankan      html  css  js  c++  java
  • C++纯虚函数、抽象类、纯抽象类

    #include<iostream>
    
    class Shape {  //抽象类
        //包含纯虚函数的类叫抽象类
        //不能使用抽象类创建对象
        //如果类中所有的成员函数都是纯虚函数,那么该类就是纯抽象类--也叫接口类--纯属给子类做接口的类
    
    public:
        Shape(int x = 0, int y = 0) :m_x(x), m_y(y) {    }
        virtual void draw(void) = 0;   //纯虚函数
        //自定义了接口,没有实现体的虚函数叫纯虚函数
        
    protected:
        int m_x; 
        int m_y; 
    };
    class Rect :public Shape {  
    public:
        Rect(int x, int y, int w, int h) :Shape(x, y), m_w(w), m_h(h) {}
        void draw(void) {  
            std::cout << "绘制矩形:" << m_x << ", " << m_y << ", " << m_w << ", " << m_h << std::endl;
        }
    private:
        int m_w;
        int m_h;
    };
    
    class Circle :public Shape {  
    public:
        Circle(int x, int y, int r) :Shape(x, y), m_r(r) {}
        void draw(void) {  
            std::cout << "绘制圆形:" << m_x << ", " << m_y << ", " << m_r << std::endl;
        }
    private:
        int m_r;
    };
    
    void render(Shape* buf[]) {
        for (int i = 0; buf[i] != NULL; ++i) {
            buf[i]->draw();
            
        }
    }
    
    int main()
    {
        Shape* buf[1024] = { NULL };  
        buf[0] = new Rect(100, 100, 200, 300);
        buf[1] = new Circle(100, 100, 50);
        buf[2] = new Rect(10, 80, 300, 30);
        buf[3] = new Circle(10, 150, 500);
        render(buf);
    
        return 0;
    }

    工厂模式

    #include<iostream>
    
    class PDF {
    public:
        void parse(const char* pdffile) {  //利用this指针实现多态的函数
            std::cout << "解析出一行文本" << std::endl;
            onText();
            std::cout << "解析出一副图片" << std::endl;
            onImage();
            std::cout << "解析出一个矩形" << std::endl;
            onRect();
    
        }
    
    private:
        virtual void onText(void) = 0;
        virtual void onImage(void) = 0;
        virtual void onRect(void) = 0;
    
    };
    
    class PDFRen :public PDF {
    private:
        void onText(void) {
            std::cout << "显示一行文本" << std::endl;
        }
        void onImage(void) {
            std::cout << "绘制一副图片" << std::endl;
        }
        void onRect(void) {
            std::cout << "绘制一个矩形" << std::endl;
        }
    };
    
    int main()
    {
        PDFRen r;
        r.parse("xx.pdf");
    
        return 0;
    }

  • 相关阅读:
    Python实现破解wifi密码8位(纯数字、数字与字母),并且记录破解开始和结束的时间
    WAPI相关了解及观点
    192.gulp-concat插件合并多个文件
    191.gulp处理JavaScript文件的任务
    190.gulp给文件重命名
    189.gulp创建处理css文件任务
    语句:{% url menu.url_name %}的作用
    Django2.0中的urlpattern匹配不输入任何网址时的写法
    python之函数递归
    python之全局变量与局部变量
  • 原文地址:https://www.cnblogs.com/liming19680104/p/13602314.html
Copyright © 2011-2022 走看看