zoukankan      html  css  js  c++  java
  • 抽象类

    参考:https://www.cnblogs.com/main404/p/11141938.html

    1. 纯虚函数

    形式: virtual 函数原型 = 0;

    定义: 在定义一个表达抽象概念的基类时,有时无法给出某些函数的具体实现方法,就可以将这些函数声明为纯虚函数。

    特点:无具体实现方法。

    2. 抽象类

    定义:声明了纯虚函数的类,都成为抽象类

    主要特点:抽象类只能作为基类类派生新类,不能声明抽象类的对象。(既然都是抽象概念了,纯虚函数没有具体实现方法,故不能创造该类的实际对象) 但是可以声明指向抽象类的指针变量或者引用变量,通过指针或者引用,就可以指向并访问派生类对象,进而访问派生类的成员。(体现了多态性

    作用:因为其特点,基类只是用来继承,可以作为一个接口,具体功能在派生类中实现(接口)

    #include <unistd.h>
    
    // 定义了一个文件描述符接口的抽象类。其中Read() 和 Write() 为纯虚函数,供其子类实现 
    // 其本身只实现了对文件描述符的设置与关闭操作。
    class FileDescriptorInterface{
    public:
      FileDescriptorInterface() = default;
      FileDescriptorInterface( const FileDescriptorInterface& fdInterface) = delete;
      void operator=( const FileDescriptorInterface& fdInterface ) = delete;
      FileDescriptorInterface( const int fd, const bool auto_close );
    
      virtual ~FileDescriptorInterface();
      virtual void setFd( const int fd );
      virtual int getFd() const { return fd_; }
    
      virtual int Read( void* buffer, const int nbytes ) const = 0;
      virtual int Write( const void* buffer, const int nbytes ) = 0;
      virtual int Close();
    
      void setClosed() { closed_ = true; }
      bool closed() const { return  closed_; }
    
    protected:
      unsigned int fd_ = -1;
      bool closed_ = true;
      bool auto_close_ = true;
    };
    
    FileDescriptorInterface::FileDescriptorInterface( const int fd, const bool auto_close):
        auto_close_( auto_close )
    {
        setFd( fd );
    }
    
    FileDescriptorInterface::~FileDescriptorInterface() {
        Close();
    }
    
    void FileDescriptorInterface::setFd(const int fd) {
        if (fd > 0) {
            fd_ = fd;
            closed_ = false;
        }
    }
    
    int FileDescriptorInterface::Close() {
        if (auto_close_ && !closed_ && fd_ > 0) {
            close(fd_);
            closed_ = true;
            return 0;
        }
        return -1;
    }
    

      

  • 相关阅读:
    大道至简阅读笔记01
    构建之法阅读笔记06
    第二阶段个人工作总结(10)
    学习进度条(十四周)
    第二阶段个人工作总结(9)
    SapringMVC的文件上传下载以及拦截器
    Servlet的请求
    Servlet 的生命周期
    IO流
    set接口
  • 原文地址:https://www.cnblogs.com/zengtx/p/11942850.html
Copyright © 2011-2022 走看看