抽象类

参考: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;
}

  

posted @ 2019-11-27 15:50  小荷才楼尖尖角  Views(150)  Comments(0Edit  收藏  举报