diff --git a/xfa/fxbarcode/BC_Binarizer.h b/xfa/fxbarcode/BC_Binarizer.h
index 20be039..8482c24 100644
--- a/xfa/fxbarcode/BC_Binarizer.h
+++ b/xfa/fxbarcode/BC_Binarizer.h
@@ -17,6 +17,7 @@
  public:
   CBC_Binarizer(CBC_LuminanceSource* source);
   virtual ~CBC_Binarizer();
+
   CBC_LuminanceSource* GetLuminanceSource();
   virtual CBC_CommonBitMatrix* GetBlackMatrix(int32_t& e) = 0;
   virtual CBC_CommonBitArray* GetBlackRow(int32_t y,
diff --git a/xfa/fxbarcode/BC_BinaryBitmap.h b/xfa/fxbarcode/BC_BinaryBitmap.h
index 5f4dd87..445b5af 100644
--- a/xfa/fxbarcode/BC_BinaryBitmap.h
+++ b/xfa/fxbarcode/BC_BinaryBitmap.h
@@ -17,6 +17,7 @@
  public:
   CBC_BinaryBitmap(CBC_Binarizer* binarizer);
   virtual ~CBC_BinaryBitmap();
+
   int32_t GetWidth();
   int32_t GetHeight();
   CBC_CommonBitMatrix* GetMatrix(int32_t& e);
diff --git a/xfa/fxbarcode/BC_BufferedImageLuminanceSource.cpp b/xfa/fxbarcode/BC_BufferedImageLuminanceSource.cpp
index f822349..7cdf957 100644
--- a/xfa/fxbarcode/BC_BufferedImageLuminanceSource.cpp
+++ b/xfa/fxbarcode/BC_BufferedImageLuminanceSource.cpp
@@ -30,7 +30,8 @@
 
 class CBC_Pause : public IFX_Pause {
  public:
-  virtual FX_BOOL NeedToPauseNow() { return TRUE; }
+  // IFX_Pause
+  FX_BOOL NeedToPauseNow() override;
 };
 
 static CFX_DIBitmap* CreateDIBSource(IFX_FileRead* fileread) {
@@ -154,3 +155,7 @@
   }
   return matrix;
 }
+
+FX_BOOL CBC_Pause::NeedToPauseNow() {
+  return TRUE;
+}
diff --git a/xfa/fxbarcode/BC_BufferedImageLuminanceSource.h b/xfa/fxbarcode/BC_BufferedImageLuminanceSource.h
index ca3aafb..da36826 100644
--- a/xfa/fxbarcode/BC_BufferedImageLuminanceSource.h
+++ b/xfa/fxbarcode/BC_BufferedImageLuminanceSource.h
@@ -16,10 +16,12 @@
  public:
   explicit CBC_BufferedImageLuminanceSource(const CFX_WideString& filename);
   explicit CBC_BufferedImageLuminanceSource(CFX_DIBitmap* pBitmap);
-  virtual ~CBC_BufferedImageLuminanceSource();
+  ~CBC_BufferedImageLuminanceSource() override;
 
-  CFX_ByteArray* GetRow(int32_t y, CFX_ByteArray& row, int32_t& e);
-  CFX_ByteArray* GetMatrix();
+  // CBC_LuminanceSource
+  CFX_ByteArray* GetRow(int32_t y, CFX_ByteArray& row, int32_t& e) override;
+  CFX_ByteArray* GetMatrix() override;
+
   virtual void Init(int32_t& e);
 
  private:
diff --git a/xfa/fxbarcode/BC_DecoderResult.h b/xfa/fxbarcode/BC_DecoderResult.h
index 81d7856..e4170c8 100644
--- a/xfa/fxbarcode/BC_DecoderResult.h
+++ b/xfa/fxbarcode/BC_DecoderResult.h
@@ -15,6 +15,7 @@
                     CFX_ByteString text,
                     CFX_ByteString ecLevel);
   virtual ~CBC_DecoderResult();
+
   CFX_ByteArray* getRawBytes();
   CFX_ByteString getText();
   CFX_ByteString getECLevel();
diff --git a/xfa/fxbarcode/BC_TwoDimWriter.cpp b/xfa/fxbarcode/BC_TwoDimWriter.cpp
index fdad7e2..40b5519 100644
--- a/xfa/fxbarcode/BC_TwoDimWriter.cpp
+++ b/xfa/fxbarcode/BC_TwoDimWriter.cpp
@@ -54,6 +54,10 @@
   }
 }
 
+int32_t CBC_TwoDimWriter::GetErrorCorrectionLevel() {
+  return m_iCorrectLevel;
+}
+
 void CBC_TwoDimWriter::RenderBitmapResult(CFX_DIBitmap*& pOutBitmap,
                                           int32_t& e) {
   if (m_bFixedSize) {
diff --git a/xfa/fxbarcode/BC_TwoDimWriter.h b/xfa/fxbarcode/BC_TwoDimWriter.h
index 6256804..da2e6d9 100644
--- a/xfa/fxbarcode/BC_TwoDimWriter.h
+++ b/xfa/fxbarcode/BC_TwoDimWriter.h
@@ -15,7 +15,8 @@
 class CBC_TwoDimWriter : public CBC_Writer {
  public:
   CBC_TwoDimWriter();
-  virtual ~CBC_TwoDimWriter();
+  ~CBC_TwoDimWriter() override;
+
   virtual void RenderResult(uint8_t* code,
                             int32_t codeWidth,
                             int32_t codeHeight,
@@ -24,7 +25,7 @@
   virtual void RenderDeviceResult(CFX_RenderDevice* device,
                                   const CFX_Matrix* matrix);
   virtual FX_BOOL SetErrorCorrectionLevel(int32_t level) = 0;
-  virtual int32_t GetErrorCorrectionLevel() { return m_iCorrectLevel; }
+  virtual int32_t GetErrorCorrectionLevel();
 
  protected:
   int32_t m_iCorrectLevel;
diff --git a/xfa/fxbarcode/cbc_codabar.cpp b/xfa/fxbarcode/cbc_codabar.cpp
index 4ed63ba..c2fe2a4 100644
--- a/xfa/fxbarcode/cbc_codabar.cpp
+++ b/xfa/fxbarcode/cbc_codabar.cpp
@@ -105,6 +105,10 @@
   return TRUE;
 }
 
+BC_TYPE CBC_Codabar::GetType() {
+  return BC_CODABAR;
+}
+
 CFX_WideString CBC_Codabar::Decode(uint8_t* buf,
                                    int32_t width,
                                    int32_t height,
diff --git a/xfa/fxbarcode/cbc_codabar.h b/xfa/fxbarcode/cbc_codabar.h
index 9684b58..a0eb07f 100644
--- a/xfa/fxbarcode/cbc_codabar.h
+++ b/xfa/fxbarcode/cbc_codabar.h
@@ -30,7 +30,7 @@
                        const CFX_Matrix* matrix,
                        int32_t& e) override;
   FX_BOOL RenderBitmap(CFX_DIBitmap*& pOutBitmap, int32_t& e) override;
-  BC_TYPE GetType() override { return BC_CODABAR; }
+  BC_TYPE GetType() override;
 
   FX_BOOL SetStartChar(FX_CHAR start);
   FX_BOOL SetEndChar(FX_CHAR end);
diff --git a/xfa/fxbarcode/cbc_code128.cpp b/xfa/fxbarcode/cbc_code128.cpp
index c3614be..abae7a3 100644
--- a/xfa/fxbarcode/cbc_code128.cpp
+++ b/xfa/fxbarcode/cbc_code128.cpp
@@ -86,6 +86,10 @@
   return TRUE;
 }
 
+BC_TYPE CBC_Code128::GetType() {
+  return BC_CODE128;
+}
+
 CFX_WideString CBC_Code128::Decode(uint8_t* buf,
                                    int32_t width,
                                    int32_t height,
diff --git a/xfa/fxbarcode/cbc_code128.h b/xfa/fxbarcode/cbc_code128.h
index c5aa8e1..ddb779d 100644
--- a/xfa/fxbarcode/cbc_code128.h
+++ b/xfa/fxbarcode/cbc_code128.h
@@ -30,7 +30,7 @@
                        const CFX_Matrix* matrix,
                        int32_t& e) override;
   FX_BOOL RenderBitmap(CFX_DIBitmap*& pOutBitmap, int32_t& e) override;
-  BC_TYPE GetType() override { return BC_CODE128; }
+  BC_TYPE GetType() override;
 
   FX_BOOL SetTextLocation(BC_TEXT_LOC loction);
 
diff --git a/xfa/fxbarcode/cbc_code39.cpp b/xfa/fxbarcode/cbc_code39.cpp
index 03e618e..2b9852a 100644
--- a/xfa/fxbarcode/cbc_code39.cpp
+++ b/xfa/fxbarcode/cbc_code39.cpp
@@ -90,6 +90,10 @@
   return TRUE;
 }
 
+BC_TYPE CBC_Code39::GetType() {
+  return BC_CODE39;
+}
+
 CFX_WideString CBC_Code39::Decode(uint8_t* buf,
                                   int32_t width,
                                   int32_t height,
diff --git a/xfa/fxbarcode/cbc_code39.h b/xfa/fxbarcode/cbc_code39.h
index d6dad7d..673975b 100644
--- a/xfa/fxbarcode/cbc_code39.h
+++ b/xfa/fxbarcode/cbc_code39.h
@@ -32,7 +32,7 @@
                        const CFX_Matrix* matrix,
                        int32_t& e) override;
   FX_BOOL RenderBitmap(CFX_DIBitmap*& pOutBitmap, int32_t& e) override;
-  BC_TYPE GetType() override { return BC_CODE39; }
+  BC_TYPE GetType() override;
 
   FX_BOOL SetTextLocation(BC_TEXT_LOC location);
   FX_BOOL SetWideNarrowRatio(int32_t ratio);
diff --git a/xfa/fxbarcode/cbc_datamatrix.cpp b/xfa/fxbarcode/cbc_datamatrix.cpp
index 08b7683..5e37b54 100644
--- a/xfa/fxbarcode/cbc_datamatrix.cpp
+++ b/xfa/fxbarcode/cbc_datamatrix.cpp
@@ -65,6 +65,10 @@
   return TRUE;
 }
 
+BC_TYPE CBC_DataMatrix::GetType() {
+  return BC_DATAMATRIX;
+}
+
 CFX_WideString CBC_DataMatrix::Decode(uint8_t* buf,
                                       int32_t width,
                                       int32_t height,
diff --git a/xfa/fxbarcode/cbc_datamatrix.h b/xfa/fxbarcode/cbc_datamatrix.h
index 7cd4875..392fa55 100644
--- a/xfa/fxbarcode/cbc_datamatrix.h
+++ b/xfa/fxbarcode/cbc_datamatrix.h
@@ -30,7 +30,7 @@
                        const CFX_Matrix* matrix,
                        int32_t& e) override;
   FX_BOOL RenderBitmap(CFX_DIBitmap*& pOutBitmap, int32_t& e) override;
-  BC_TYPE GetType() override { return BC_DATAMATRIX; }
+  BC_TYPE GetType() override;
 };
 
 #endif  // XFA_FXBARCODE_CBC_DATAMATRIX_H_
diff --git a/xfa/fxbarcode/cbc_ean13.cpp b/xfa/fxbarcode/cbc_ean13.cpp
index 589af5b..0725083 100644
--- a/xfa/fxbarcode/cbc_ean13.cpp
+++ b/xfa/fxbarcode/cbc_ean13.cpp
@@ -92,6 +92,10 @@
   return TRUE;
 }
 
+BC_TYPE CBC_EAN13::GetType() {
+  return BC_EAN13;
+}
+
 CFX_WideString CBC_EAN13::Decode(uint8_t* buf,
                                  int32_t width,
                                  int32_t height,
diff --git a/xfa/fxbarcode/cbc_ean13.h b/xfa/fxbarcode/cbc_ean13.h
index 93abab2..afe2cd9 100644
--- a/xfa/fxbarcode/cbc_ean13.h
+++ b/xfa/fxbarcode/cbc_ean13.h
@@ -30,7 +30,7 @@
                        const CFX_Matrix* matrix,
                        int32_t& e) override;
   FX_BOOL RenderBitmap(CFX_DIBitmap*& pOutBitmap, int32_t& e) override;
-  BC_TYPE GetType() override { return BC_EAN13; }
+  BC_TYPE GetType() override;
 
  private:
   CFX_WideString Preprocess(const CFX_WideStringC& contents);
diff --git a/xfa/fxbarcode/cbc_ean8.cpp b/xfa/fxbarcode/cbc_ean8.cpp
index 3f32d22..7280c37 100644
--- a/xfa/fxbarcode/cbc_ean8.cpp
+++ b/xfa/fxbarcode/cbc_ean8.cpp
@@ -91,6 +91,10 @@
   return TRUE;
 }
 
+BC_TYPE CBC_EAN8::GetType() {
+  return BC_EAN8;
+}
+
 CFX_WideString CBC_EAN8::Decode(uint8_t* buf,
                                 int32_t width,
                                 int32_t height,
diff --git a/xfa/fxbarcode/cbc_ean8.h b/xfa/fxbarcode/cbc_ean8.h
index d9cd057..dd94890 100644
--- a/xfa/fxbarcode/cbc_ean8.h
+++ b/xfa/fxbarcode/cbc_ean8.h
@@ -30,7 +30,7 @@
                        const CFX_Matrix* matrix,
                        int32_t& e) override;
   FX_BOOL RenderBitmap(CFX_DIBitmap*& pOutBitmap, int32_t& e) override;
-  BC_TYPE GetType() override { return BC_EAN8; }
+  BC_TYPE GetType() override;
 
  private:
   CFX_WideString Preprocess(const CFX_WideStringC& contents);
diff --git a/xfa/fxbarcode/cbc_pdf417i.cpp b/xfa/fxbarcode/cbc_pdf417i.cpp
index 514cc01..005be94 100644
--- a/xfa/fxbarcode/cbc_pdf417i.cpp
+++ b/xfa/fxbarcode/cbc_pdf417i.cpp
@@ -73,6 +73,10 @@
   return TRUE;
 }
 
+BC_TYPE CBC_PDF417I::GetType() {
+  return BC_PDF417;
+}
+
 CFX_WideString CBC_PDF417I::Decode(uint8_t* buf,
                                    int32_t width,
                                    int32_t height,
diff --git a/xfa/fxbarcode/cbc_pdf417i.h b/xfa/fxbarcode/cbc_pdf417i.h
index 0658ff7..4fdf2f0 100644
--- a/xfa/fxbarcode/cbc_pdf417i.h
+++ b/xfa/fxbarcode/cbc_pdf417i.h
@@ -30,7 +30,7 @@
                        const CFX_Matrix* matrix,
                        int32_t& e) override;
   FX_BOOL RenderBitmap(CFX_DIBitmap*& pOutBitmap, int32_t& e) override;
-  BC_TYPE GetType() override { return BC_PDF417; }
+  BC_TYPE GetType() override;
 
   FX_BOOL SetErrorCorrectionLevel(int32_t level);
   void SetTruncated(FX_BOOL truncated);
diff --git a/xfa/fxbarcode/cbc_qrcode.cpp b/xfa/fxbarcode/cbc_qrcode.cpp
index 9ea20a6..1e0703c 100644
--- a/xfa/fxbarcode/cbc_qrcode.cpp
+++ b/xfa/fxbarcode/cbc_qrcode.cpp
@@ -81,6 +81,10 @@
   return TRUE;
 }
 
+BC_TYPE CBC_QRCode::GetType() {
+  return BC_QR_CODE;
+}
+
 CFX_WideString CBC_QRCode::Decode(uint8_t* buf,
                                   int32_t width,
                                   int32_t height,
diff --git a/xfa/fxbarcode/cbc_qrcode.h b/xfa/fxbarcode/cbc_qrcode.h
index 4038164..d14d872 100644
--- a/xfa/fxbarcode/cbc_qrcode.h
+++ b/xfa/fxbarcode/cbc_qrcode.h
@@ -30,7 +30,7 @@
                        const CFX_Matrix* matrix,
                        int32_t& e) override;
   FX_BOOL RenderBitmap(CFX_DIBitmap*& pOutBitmap, int32_t& e) override;
-  BC_TYPE GetType() override { return BC_QR_CODE; }
+  BC_TYPE GetType() override;
 
   FX_BOOL SetVersion(int32_t version);
   FX_BOOL SetErrorCorrectionLevel(int32_t level);
diff --git a/xfa/fxbarcode/cbc_upca.cpp b/xfa/fxbarcode/cbc_upca.cpp
index 5256122..ad0ec55 100644
--- a/xfa/fxbarcode/cbc_upca.cpp
+++ b/xfa/fxbarcode/cbc_upca.cpp
@@ -113,3 +113,7 @@
   BC_EXCEPTION_CHECK_ReturnValue(e, L"");
   return CFX_WideString::FromUTF8(str.AsStringC());
 }
+
+BC_TYPE CBC_UPCA::GetType() {
+  return BC_UPCA;
+}
diff --git a/xfa/fxbarcode/cbc_upca.h b/xfa/fxbarcode/cbc_upca.h
index a2e0658..cf45b89 100644
--- a/xfa/fxbarcode/cbc_upca.h
+++ b/xfa/fxbarcode/cbc_upca.h
@@ -17,7 +17,7 @@
   CBC_UPCA();
   ~CBC_UPCA() override;
 
-  // CBC_OneCode:
+  // CBC_CodeBase
   FX_BOOL Encode(const CFX_WideStringC& contents,
                  FX_BOOL isDevice,
                  int32_t& e) override;
@@ -30,7 +30,7 @@
                         int32_t height,
                         int32_t& e) override;
   CFX_WideString Decode(CFX_DIBitmap* pBitmap, int32_t& e) override;
-  BC_TYPE GetType() override { return BC_UPCA; }
+  BC_TYPE GetType() override;
 
  private:
   CFX_WideString Preprocess(const CFX_WideStringC& contents);
diff --git a/xfa/fxbarcode/common/BC_CommonBitArray.h b/xfa/fxbarcode/common/BC_CommonBitArray.h
index 1c89500..04cb96b 100644
--- a/xfa/fxbarcode/common/BC_CommonBitArray.h
+++ b/xfa/fxbarcode/common/BC_CommonBitArray.h
@@ -11,10 +11,11 @@
 
 class CBC_CommonBitArray {
  public:
-  CBC_CommonBitArray(CBC_CommonBitArray* array);
-  CBC_CommonBitArray(int32_t size);
+  explicit CBC_CommonBitArray(CBC_CommonBitArray* array);
+  explicit CBC_CommonBitArray(int32_t size);
   CBC_CommonBitArray();
   virtual ~CBC_CommonBitArray();
+
   int32_t GetSize();
   CFX_Int32Array& GetBits();
   int32_t GetSizeInBytes();
diff --git a/xfa/fxbarcode/common/BC_CommonBitMatrix.h b/xfa/fxbarcode/common/BC_CommonBitMatrix.h
index ebf7454..48a26b9 100644
--- a/xfa/fxbarcode/common/BC_CommonBitMatrix.h
+++ b/xfa/fxbarcode/common/BC_CommonBitMatrix.h
@@ -15,6 +15,10 @@
  public:
   CBC_CommonBitMatrix();
   virtual ~CBC_CommonBitMatrix();
+
+  virtual void Init(int32_t dimension);
+  virtual void Init(int32_t width, int32_t height);
+
   FX_BOOL Get(int32_t x, int32_t y);
   void Set(int32_t x, int32_t y);
   void Flip(int32_t x, int32_t y);
@@ -32,8 +36,6 @@
   int32_t GetHeight();
   int32_t GetRowSize();
   int32_t GetDimension(int32_t& e);
-  virtual void Init(int32_t dimension);
-  virtual void Init(int32_t width, int32_t height);
   int32_t* GetBits();
 
  private:
diff --git a/xfa/fxbarcode/common/BC_CommonBitSource.h b/xfa/fxbarcode/common/BC_CommonBitSource.h
index f33e077..7c6736c 100644
--- a/xfa/fxbarcode/common/BC_CommonBitSource.h
+++ b/xfa/fxbarcode/common/BC_CommonBitSource.h
@@ -13,7 +13,8 @@
 class CBC_CommonBitSource {
  public:
   CBC_CommonBitSource(CFX_ByteArray* bytes);
-  virtual ~CBC_CommonBitSource();
+  ~CBC_CommonBitSource();
+
   int32_t ReadBits(int32_t numBits, int32_t& e);
   int32_t Available();
   int32_t getByteOffset();
diff --git a/xfa/fxbarcode/common/BC_CommonByteArray.h b/xfa/fxbarcode/common/BC_CommonByteArray.h
index eaf68d9..2570f81 100644
--- a/xfa/fxbarcode/common/BC_CommonByteArray.h
+++ b/xfa/fxbarcode/common/BC_CommonByteArray.h
@@ -10,16 +10,12 @@
 #include "core/fxcrt/include/fx_basic.h"
 
 class CBC_CommonByteArray {
- private:
-  int32_t m_size;
-  int32_t m_index;
-  uint8_t* m_bytes;
-
  public:
   CBC_CommonByteArray();
-  CBC_CommonByteArray(int32_t size);
+  explicit CBC_CommonByteArray(int32_t size);
   CBC_CommonByteArray(uint8_t* byteArray, int32_t size);
   virtual ~CBC_CommonByteArray();
+
   int32_t At(int32_t index);
   void Set(int32_t index, int32_t value);
   int32_t Size();
@@ -28,6 +24,11 @@
   void Reserve(int32_t capacity);
   void Set(uint8_t* source, int32_t offset, int32_t count);
   void Set(CFX_ByteArray* source, int32_t offset, int32_t count);
+
+ private:
+  int32_t m_size;
+  int32_t m_index;
+  uint8_t* m_bytes;
 };
 
 #endif  // XFA_FXBARCODE_COMMON_BC_COMMONBYTEARRAY_H_
diff --git a/xfa/fxbarcode/common/BC_CommonByteMatrix.h b/xfa/fxbarcode/common/BC_CommonByteMatrix.h
index 74e1203..9bc2a88 100644
--- a/xfa/fxbarcode/common/BC_CommonByteMatrix.h
+++ b/xfa/fxbarcode/common/BC_CommonByteMatrix.h
@@ -15,6 +15,7 @@
  public:
   CBC_CommonByteMatrix(int32_t width, int32_t height);
   virtual ~CBC_CommonByteMatrix();
+
   int32_t GetHeight();
   int32_t GetWidth();
   uint8_t Get(int32_t x, int32_t y);
diff --git a/xfa/fxbarcode/common/BC_CommonCharacterSetECI.h b/xfa/fxbarcode/common/BC_CommonCharacterSetECI.h
index 5bd77e4..a2fe0ed 100644
--- a/xfa/fxbarcode/common/BC_CommonCharacterSetECI.h
+++ b/xfa/fxbarcode/common/BC_CommonCharacterSetECI.h
@@ -13,10 +13,10 @@
 class CBC_CommonCharacterSetECI : public CBC_CommonECI {
  public:
   CBC_CommonCharacterSetECI(int32_t value, CFX_ByteString encodingName);
-  virtual ~CBC_CommonCharacterSetECI();
+  ~CBC_CommonCharacterSetECI() override;
+
   CFX_ByteString GetEncodingName();
   static void AddCharacterSet(int32_t value, CFX_ByteString encodingName);
-  int32_t GetValue();
   static CBC_CommonCharacterSetECI* GetCharacterSetECIByValue(int32_t value);
   static CBC_CommonCharacterSetECI* GetCharacterSetECIByName(
       const CFX_ByteString& name);
diff --git a/xfa/fxbarcode/common/BC_CommonDecoderResult.h b/xfa/fxbarcode/common/BC_CommonDecoderResult.h
index cec7431..bcb65df 100644
--- a/xfa/fxbarcode/common/BC_CommonDecoderResult.h
+++ b/xfa/fxbarcode/common/BC_CommonDecoderResult.h
@@ -16,6 +16,7 @@
  public:
   CBC_CommonDecoderResult();
   virtual ~CBC_CommonDecoderResult();
+
   const CFX_ByteArray& GetRawBytes();
   const CFX_ByteString& GetText();
   const CFX_Int32Array& GetByteSegments();
diff --git a/xfa/fxbarcode/common/BC_CommonECI.h b/xfa/fxbarcode/common/BC_CommonECI.h
index 20b3e76..5bc4c14 100644
--- a/xfa/fxbarcode/common/BC_CommonECI.h
+++ b/xfa/fxbarcode/common/BC_CommonECI.h
@@ -14,7 +14,8 @@
   CBC_CommonECI(int32_t value);
   virtual ~CBC_CommonECI();
 
-  int32_t GetValue();
+  virtual int32_t GetValue();
+
   static CBC_CommonECI* GetEICByValue(int32_t value, int32_t& e);
 
  private:
diff --git a/xfa/fxbarcode/common/BC_CommonPerspectiveTransform.h b/xfa/fxbarcode/common/BC_CommonPerspectiveTransform.h
index d701b7e..8a5fd26 100644
--- a/xfa/fxbarcode/common/BC_CommonPerspectiveTransform.h
+++ b/xfa/fxbarcode/common/BC_CommonPerspectiveTransform.h
@@ -21,6 +21,7 @@
                                  FX_FLOAT a23,
                                  FX_FLOAT a33);
   virtual ~CBC_CommonPerspectiveTransform();
+
   static CBC_CommonPerspectiveTransform* QuadrilateralToQuadrilateral(
       FX_FLOAT x0,
       FX_FLOAT y0,
diff --git a/xfa/fxbarcode/common/BC_GlobalHistogramBinarizer.h b/xfa/fxbarcode/common/BC_GlobalHistogramBinarizer.h
index 01ac9a6..786e8e0 100644
--- a/xfa/fxbarcode/common/BC_GlobalHistogramBinarizer.h
+++ b/xfa/fxbarcode/common/BC_GlobalHistogramBinarizer.h
@@ -17,13 +17,16 @@
 class CBC_GlobalHistogramBinarizer : public CBC_Binarizer {
  public:
   CBC_GlobalHistogramBinarizer(CBC_LuminanceSource* source);
-  virtual ~CBC_GlobalHistogramBinarizer();
+  ~CBC_GlobalHistogramBinarizer() override;
 
   void InitArrays(int32_t luminanceSize);
-  CBC_CommonBitMatrix* GetBlackMatrix(int32_t& e);
+
+  // CBC_Binarizer
+  CBC_CommonBitMatrix* GetBlackMatrix(int32_t& e) override;
   CBC_CommonBitArray* GetBlackRow(int32_t y,
                                   CBC_CommonBitArray* row,
-                                  int32_t& e);
+                                  int32_t& e) override;
+
   static int32_t EstimateBlackPoint(CFX_Int32Array& buckets, int32_t& e);
 
  private:
diff --git a/xfa/fxbarcode/common/BC_WhiteRectangleDetector.h b/xfa/fxbarcode/common/BC_WhiteRectangleDetector.h
index f3ac77a..427d7b8 100644
--- a/xfa/fxbarcode/common/BC_WhiteRectangleDetector.h
+++ b/xfa/fxbarcode/common/BC_WhiteRectangleDetector.h
@@ -14,18 +14,19 @@
 
 class CBC_WhiteRectangleDetector {
  public:
-  CBC_WhiteRectangleDetector(CBC_CommonBitMatrix* image);
+  explicit CBC_WhiteRectangleDetector(CBC_CommonBitMatrix* image);
   CBC_WhiteRectangleDetector(CBC_CommonBitMatrix* image,
                              int32_t initSize,
                              int32_t x,
                              int32_t y);
   virtual ~CBC_WhiteRectangleDetector();
+
   virtual void Init(int32_t& e);
 
   CFX_ArrayTemplate<CBC_ResultPoint*>* Detect(int32_t& e);
 
  private:
-  int32_t Round(float d);
+  int32_t Round(FX_FLOAT d);
   CBC_ResultPoint* GetBlackPointOnSegment(FX_FLOAT aX,
                                           FX_FLOAT aY,
                                           FX_FLOAT bX,
diff --git a/xfa/fxbarcode/datamatrix/BC_ASCIIEncoder.h b/xfa/fxbarcode/datamatrix/BC_ASCIIEncoder.h
index 11be5e0..40559b5 100644
--- a/xfa/fxbarcode/datamatrix/BC_ASCIIEncoder.h
+++ b/xfa/fxbarcode/datamatrix/BC_ASCIIEncoder.h
@@ -14,9 +14,11 @@
 class CBC_ASCIIEncoder : public CBC_Encoder {
  public:
   CBC_ASCIIEncoder();
-  virtual ~CBC_ASCIIEncoder();
-  int32_t getEncodingMode();
-  void Encode(CBC_EncoderContext& context, int32_t& e);
+  ~CBC_ASCIIEncoder() override;
+
+  // CBC_Encoder
+  int32_t getEncodingMode() override;
+  void Encode(CBC_EncoderContext& context, int32_t& e) override;
 
  private:
   static FX_WCHAR encodeASCIIDigits(FX_WCHAR digit1,
diff --git a/xfa/fxbarcode/datamatrix/BC_Base256Encoder.h b/xfa/fxbarcode/datamatrix/BC_Base256Encoder.h
index 64dbdc7..c41c79d 100644
--- a/xfa/fxbarcode/datamatrix/BC_Base256Encoder.h
+++ b/xfa/fxbarcode/datamatrix/BC_Base256Encoder.h
@@ -12,9 +12,11 @@
 class CBC_Base256Encoder : public CBC_Encoder {
  public:
   CBC_Base256Encoder();
-  virtual ~CBC_Base256Encoder();
-  int32_t getEncodingMode();
-  void Encode(CBC_EncoderContext& context, int32_t& e);
+  ~CBC_Base256Encoder() override;
+
+  // CBC_Encoder
+  int32_t getEncodingMode() override;
+  void Encode(CBC_EncoderContext& context, int32_t& e) override;
 
  private:
   static FX_WCHAR randomize255State(FX_WCHAR ch, int32_t codewordPosition);
diff --git a/xfa/fxbarcode/datamatrix/BC_C40Encoder.h b/xfa/fxbarcode/datamatrix/BC_C40Encoder.h
index 9dcb1e5..9737981 100644
--- a/xfa/fxbarcode/datamatrix/BC_C40Encoder.h
+++ b/xfa/fxbarcode/datamatrix/BC_C40Encoder.h
@@ -12,11 +12,15 @@
 class CBC_C40Encoder : public CBC_Encoder {
  public:
   CBC_C40Encoder();
-  virtual ~CBC_C40Encoder();
-  virtual int32_t getEncodingMode();
-  virtual void Encode(CBC_EncoderContext& context, int32_t& e);
+  ~CBC_C40Encoder() override;
+
+  // CBC_Encoder
+  int32_t getEncodingMode() override;
+  void Encode(CBC_EncoderContext& context, int32_t& e) override;
+
   static void writeNextTriplet(CBC_EncoderContext& context,
                                CFX_WideString& buffer);
+
   virtual void handleEOD(CBC_EncoderContext& context,
                          CFX_WideString& buffer,
                          int32_t& e);
diff --git a/xfa/fxbarcode/datamatrix/BC_DataMatrixBitMatrixParser.h b/xfa/fxbarcode/datamatrix/BC_DataMatrixBitMatrixParser.h
index c8fc334..6354004 100644
--- a/xfa/fxbarcode/datamatrix/BC_DataMatrixBitMatrixParser.h
+++ b/xfa/fxbarcode/datamatrix/BC_DataMatrixBitMatrixParser.h
@@ -16,6 +16,7 @@
  public:
   CBC_DataMatrixBitMatrixParser();
   virtual ~CBC_DataMatrixBitMatrixParser();
+
   CBC_DataMatrixVersion* GetVersion();
   CFX_ByteArray* ReadCodewords(int32_t& e);
   FX_BOOL ReadModule(int32_t row,
diff --git a/xfa/fxbarcode/datamatrix/BC_DataMatrixDecodedBitStreamParser.h b/xfa/fxbarcode/datamatrix/BC_DataMatrixDecodedBitStreamParser.h
index 415e27b..4ff6776 100644
--- a/xfa/fxbarcode/datamatrix/BC_DataMatrixDecodedBitStreamParser.h
+++ b/xfa/fxbarcode/datamatrix/BC_DataMatrixDecodedBitStreamParser.h
@@ -6,12 +6,15 @@
 
 #ifndef XFA_FXBARCODE_DATAMATRIX_BC_DATAMATRIXDECODEDBITSTREAMPARSER_H_
 #define XFA_FXBARCODE_DATAMATRIX_BC_DATAMATRIXDECODEDBITSTREAMPARSER_H_
+
 class CBC_CommonDecoderResult;
 class CBC_CommonBitSource;
+
 class CBC_DataMatrixDecodedBitStreamParser {
  public:
   CBC_DataMatrixDecodedBitStreamParser();
   virtual ~CBC_DataMatrixDecodedBitStreamParser();
+
   static CBC_CommonDecoderResult* Decode(CFX_ByteArray& bytes, int32_t& e);
 
  private:
diff --git a/xfa/fxbarcode/datamatrix/BC_DataMatrixDecoder.h b/xfa/fxbarcode/datamatrix/BC_DataMatrixDecoder.h
index c7af613..38d3fe5 100644
--- a/xfa/fxbarcode/datamatrix/BC_DataMatrixDecoder.h
+++ b/xfa/fxbarcode/datamatrix/BC_DataMatrixDecoder.h
@@ -17,7 +17,9 @@
  public:
   CBC_DataMatrixDecoder();
   virtual ~CBC_DataMatrixDecoder();
+
   CBC_CommonDecoderResult* Decode(CBC_CommonBitMatrix* bits, int32_t& e);
+
   virtual void Init();
 
  private:
diff --git a/xfa/fxbarcode/datamatrix/BC_DataMatrixDetector.cpp b/xfa/fxbarcode/datamatrix/BC_DataMatrixDetector.cpp
index a4ca4e2..d345153 100644
--- a/xfa/fxbarcode/datamatrix/BC_DataMatrixDetector.cpp
+++ b/xfa/fxbarcode/datamatrix/BC_DataMatrixDetector.cpp
@@ -405,3 +405,11 @@
   (*patterns)[1] = topLeft;
   (*patterns)[2] = topRight;
 }
+
+CBC_ResultPointsAndTransitions::CBC_ResultPointsAndTransitions(
+    CBC_ResultPoint* from,
+    CBC_ResultPoint* to,
+    int32_t transitions)
+    : m_from(from), m_to(to), m_transitions(transitions) {}
+
+CBC_ResultPointsAndTransitions::~CBC_ResultPointsAndTransitions() {}
diff --git a/xfa/fxbarcode/datamatrix/BC_DataMatrixDetector.h b/xfa/fxbarcode/datamatrix/BC_DataMatrixDetector.h
index 8ef053b..d06b051 100644
--- a/xfa/fxbarcode/datamatrix/BC_DataMatrixDetector.h
+++ b/xfa/fxbarcode/datamatrix/BC_DataMatrixDetector.h
@@ -19,12 +19,9 @@
  public:
   CBC_ResultPointsAndTransitions(CBC_ResultPoint* from,
                                  CBC_ResultPoint* to,
-                                 int32_t transitions) {
-    m_from = from;
-    m_to = to;
-    m_transitions = transitions;
-  }
-  ~CBC_ResultPointsAndTransitions() {}
+                                 int32_t transitions);
+  ~CBC_ResultPointsAndTransitions();
+
   CBC_ResultPoint* GetFrom() const { return m_from; }
   CBC_ResultPoint* GetTo() const { return m_to; }
   int32_t GetTransitions() const { return m_transitions; }
@@ -39,6 +36,7 @@
  public:
   CBC_DataMatrixDetector(CBC_CommonBitMatrix* image);
   virtual ~CBC_DataMatrixDetector();
+
   CBC_QRDetectorResult* Detect(int32_t& e);
   CBC_ResultPoint* CorrectTopRightRectangular(CBC_ResultPoint* bottomLeft,
                                               CBC_ResultPoint* bottomRight,
@@ -67,6 +65,7 @@
                  CBC_ResultPoint* key);
   int32_t Round(FX_FLOAT d);
   void OrderBestPatterns(CFX_ArrayTemplate<CBC_ResultPoint*>* patterns);
+
   virtual void Init(int32_t& e);
 
  private:
diff --git a/xfa/fxbarcode/datamatrix/BC_DataMatrixReader.cpp b/xfa/fxbarcode/datamatrix/BC_DataMatrixReader.cpp
index 31d95b0..7c1ba96 100644
--- a/xfa/fxbarcode/datamatrix/BC_DataMatrixReader.cpp
+++ b/xfa/fxbarcode/datamatrix/BC_DataMatrixReader.cpp
@@ -57,6 +57,7 @@
   BC_EXCEPTION_CHECK_ReturnValue(e, "");
   return decodeResult->GetText();
 }
+
 CFX_ByteString CBC_DataMatrixReader::Decode(CBC_BinaryBitmap* image,
                                             int32_t& e) {
   CFX_ByteString bs = Decode(image, 0, e);
diff --git a/xfa/fxbarcode/datamatrix/BC_DataMatrixReader.h b/xfa/fxbarcode/datamatrix/BC_DataMatrixReader.h
index 21fc54e..c7a0995 100644
--- a/xfa/fxbarcode/datamatrix/BC_DataMatrixReader.h
+++ b/xfa/fxbarcode/datamatrix/BC_DataMatrixReader.h
@@ -15,9 +15,13 @@
 class CBC_DataMatrixReader : public CBC_Reader {
  public:
   CBC_DataMatrixReader();
-  virtual ~CBC_DataMatrixReader();
-  CFX_ByteString Decode(CBC_BinaryBitmap* image, int32_t& e);
-  CFX_ByteString Decode(CBC_BinaryBitmap* image, int hints, int32_t& e);
+  ~CBC_DataMatrixReader() override;
+
+  // CBC_Reader
+  CFX_ByteString Decode(CBC_BinaryBitmap* image, int32_t& e) override;
+  CFX_ByteString Decode(CBC_BinaryBitmap* image,
+                        int hints,
+                        int32_t& e) override;
 
   virtual void Init();
 
diff --git a/xfa/fxbarcode/datamatrix/BC_DataMatrixSymbolInfo144.h b/xfa/fxbarcode/datamatrix/BC_DataMatrixSymbolInfo144.h
index 4d6cdc1..2cd0cd0 100644
--- a/xfa/fxbarcode/datamatrix/BC_DataMatrixSymbolInfo144.h
+++ b/xfa/fxbarcode/datamatrix/BC_DataMatrixSymbolInfo144.h
@@ -12,9 +12,9 @@
 class CBC_DataMatrixSymbolInfo144 : public CBC_SymbolInfo {
  public:
   CBC_DataMatrixSymbolInfo144();
-  virtual ~CBC_DataMatrixSymbolInfo144();
+  ~CBC_DataMatrixSymbolInfo144() override;
+
   int32_t getInterleavedBlockCount();
-  int32_t getDataLengthForInterleavedBlock(int32_t index);
 };
 
 #endif  // XFA_FXBARCODE_DATAMATRIX_BC_DATAMATRIXSYMBOLINFO144_H_
diff --git a/xfa/fxbarcode/datamatrix/BC_DataMatrixVersion.cpp b/xfa/fxbarcode/datamatrix/BC_DataMatrixVersion.cpp
index d1dcc23..29fb792 100644
--- a/xfa/fxbarcode/datamatrix/BC_DataMatrixVersion.cpp
+++ b/xfa/fxbarcode/datamatrix/BC_DataMatrixVersion.cpp
@@ -170,3 +170,22 @@
   e = BCExceptionNotFound;
   return nullptr;
 }
+
+ECB::ECB(int32_t count, int32_t dataCodewords)
+    : m_count(count), m_dataCodewords(dataCodewords) {}
+
+ECBlocks::ECBlocks(int32_t ecCodewords, ECB* ecBlocks)
+    : m_ecCodewords(ecCodewords) {
+  m_ecBlocksArray.Add(ecBlocks);
+}
+
+ECBlocks::ECBlocks(int32_t ecCodewords, ECB* ecBlocks1, ECB* ecBlocks2)
+    : m_ecCodewords(ecCodewords) {
+  m_ecBlocksArray.Add(ecBlocks1);
+  m_ecBlocksArray.Add(ecBlocks2);
+}
+
+ECBlocks::~ECBlocks() {
+  for (int32_t i = 0; i < m_ecBlocksArray.GetSize(); i++)
+    delete m_ecBlocksArray[i];
+}
diff --git a/xfa/fxbarcode/datamatrix/BC_DataMatrixVersion.h b/xfa/fxbarcode/datamatrix/BC_DataMatrixVersion.h
index b4585d2..9bbf7f7 100644
--- a/xfa/fxbarcode/datamatrix/BC_DataMatrixVersion.h
+++ b/xfa/fxbarcode/datamatrix/BC_DataMatrixVersion.h
@@ -13,8 +13,7 @@
 
 class ECB {
  public:
-  ECB(int32_t count, int32_t dataCodewords)
-      : m_count(count), m_dataCodewords(dataCodewords) {}
+  ECB(int32_t count, int32_t dataCodewords);
 
   int32_t GetCount() const { return m_count; }
   int32_t GetDataCodewords() const { return m_dataCodewords; }
@@ -26,20 +25,9 @@
 
 class ECBlocks {
  public:
-  ECBlocks(int32_t ecCodewords, ECB* ecBlocks) : m_ecCodewords(ecCodewords) {
-    m_ecBlocksArray.Add(ecBlocks);
-  }
-
-  ECBlocks(int32_t ecCodewords, ECB* ecBlocks1, ECB* ecBlocks2)
-      : m_ecCodewords(ecCodewords) {
-    m_ecBlocksArray.Add(ecBlocks1);
-    m_ecBlocksArray.Add(ecBlocks2);
-  }
-
-  ~ECBlocks() {
-    for (int32_t i = 0; i < m_ecBlocksArray.GetSize(); i++)
-      delete m_ecBlocksArray[i];
-  }
+  ECBlocks(int32_t ecCodewords, ECB* ecBlocks);
+  ECBlocks(int32_t ecCodewords, ECB* ecBlocks1, ECB* ecBlocks2);
+  ~ECBlocks();
 
   int32_t GetECCodewords() { return m_ecCodewords; }
   const CFX_ArrayTemplate<ECB*>& GetECBlocks() { return m_ecBlocksArray; }
@@ -58,6 +46,7 @@
                         int32_t dataRegionSizeColumns,
                         ECBlocks* ecBlocks);
   virtual ~CBC_DataMatrixVersion();
+
   static void Initialize();
   static void Finalize();
   int32_t GetVersionNumber();
diff --git a/xfa/fxbarcode/datamatrix/BC_DataMatrixWriter.h b/xfa/fxbarcode/datamatrix/BC_DataMatrixWriter.h
index 7c19a07..1196e46 100644
--- a/xfa/fxbarcode/datamatrix/BC_DataMatrixWriter.h
+++ b/xfa/fxbarcode/datamatrix/BC_DataMatrixWriter.h
@@ -16,12 +16,15 @@
 class CBC_DataMatrixWriter : public CBC_TwoDimWriter {
  public:
   CBC_DataMatrixWriter();
-  virtual ~CBC_DataMatrixWriter();
-  uint8_t* Encode(const CFX_WideString& contents,
-                  int32_t& outWidth,
-                  int32_t& outHeight,
-                  int32_t& e);
-  FX_BOOL SetErrorCorrectionLevel(int32_t level);
+  ~CBC_DataMatrixWriter() override;
+
+  virtual uint8_t* Encode(const CFX_WideString& contents,
+                          int32_t& outWidth,
+                          int32_t& outHeight,
+                          int32_t& e);
+
+  // CBC_TwoDimWriter
+  FX_BOOL SetErrorCorrectionLevel(int32_t level) override;
 
  private:
   static CBC_CommonByteMatrix* encodeLowLevel(CBC_DefaultPlacement* placement,
diff --git a/xfa/fxbarcode/datamatrix/BC_EdifactEncoder.h b/xfa/fxbarcode/datamatrix/BC_EdifactEncoder.h
index fd37ffb..3eb762f 100644
--- a/xfa/fxbarcode/datamatrix/BC_EdifactEncoder.h
+++ b/xfa/fxbarcode/datamatrix/BC_EdifactEncoder.h
@@ -12,9 +12,11 @@
 class CBC_EdifactEncoder : public CBC_Encoder {
  public:
   CBC_EdifactEncoder();
-  virtual ~CBC_EdifactEncoder();
-  int32_t getEncodingMode();
-  void Encode(CBC_EncoderContext& context, int32_t& e);
+  ~CBC_EdifactEncoder() override;
+
+  // CBC_Encoder
+  int32_t getEncodingMode() override;
+  void Encode(CBC_EncoderContext& context, int32_t& e) override;
 
  private:
   static void handleEOD(CBC_EncoderContext& context,
diff --git a/xfa/fxbarcode/datamatrix/BC_Encoder.h b/xfa/fxbarcode/datamatrix/BC_Encoder.h
index 78dc6ac..68a223f 100644
--- a/xfa/fxbarcode/datamatrix/BC_Encoder.h
+++ b/xfa/fxbarcode/datamatrix/BC_Encoder.h
@@ -10,10 +10,12 @@
 #include "xfa/fxbarcode/utils.h"
 
 class CBC_EncoderContext;
+
 class CBC_Encoder {
  public:
   CBC_Encoder();
   virtual ~CBC_Encoder();
+
   virtual int32_t getEncodingMode() = 0;
   virtual void Encode(CBC_EncoderContext& context, int32_t& e) = 0;
 };
diff --git a/xfa/fxbarcode/datamatrix/BC_EncoderContext.h b/xfa/fxbarcode/datamatrix/BC_EncoderContext.h
index ddc6988..0c1c8a6 100644
--- a/xfa/fxbarcode/datamatrix/BC_EncoderContext.h
+++ b/xfa/fxbarcode/datamatrix/BC_EncoderContext.h
@@ -17,7 +17,8 @@
   CBC_EncoderContext(const CFX_WideString msg,
                      CFX_WideString ecLevel,
                      int32_t& e);
-  virtual ~CBC_EncoderContext();
+  ~CBC_EncoderContext() override;
+
   void setSymbolShape(SymbolShapeHint shape);
   void setSizeConstraints(CBC_Dimension* minSize, CBC_Dimension* maxSize);
   CFX_WideString getMessage();
diff --git a/xfa/fxbarcode/datamatrix/BC_ErrorCorrection.h b/xfa/fxbarcode/datamatrix/BC_ErrorCorrection.h
index 1ed8c34..d3b9da8 100644
--- a/xfa/fxbarcode/datamatrix/BC_ErrorCorrection.h
+++ b/xfa/fxbarcode/datamatrix/BC_ErrorCorrection.h
@@ -8,10 +8,12 @@
 #define XFA_FXBARCODE_DATAMATRIX_BC_ERRORCORRECTION_H_
 
 class CBC_SymbolInfo;
+
 class CBC_ErrorCorrection {
  public:
   CBC_ErrorCorrection();
   virtual ~CBC_ErrorCorrection();
+
   static void Initialize();
   static void Finalize();
   static CFX_WideString encodeECC200(CFX_WideString codewords,
diff --git a/xfa/fxbarcode/datamatrix/BC_HighLevelEncoder.h b/xfa/fxbarcode/datamatrix/BC_HighLevelEncoder.h
index 0aad4d4..550b601 100644
--- a/xfa/fxbarcode/datamatrix/BC_HighLevelEncoder.h
+++ b/xfa/fxbarcode/datamatrix/BC_HighLevelEncoder.h
@@ -19,7 +19,8 @@
 class CBC_HighLevelEncoder : public CBC_SymbolShapeHint {
  public:
   CBC_HighLevelEncoder();
-  virtual ~CBC_HighLevelEncoder();
+  ~CBC_HighLevelEncoder() override;
+
   CFX_ByteArray& getBytesForMessage(CFX_WideString msg);
   static CFX_WideString encodeHighLevel(CFX_WideString msg,
                                         CFX_WideString ecLevel,
diff --git a/xfa/fxbarcode/datamatrix/BC_SymbolInfo.h b/xfa/fxbarcode/datamatrix/BC_SymbolInfo.h
index 64270dd..96196da 100644
--- a/xfa/fxbarcode/datamatrix/BC_SymbolInfo.h
+++ b/xfa/fxbarcode/datamatrix/BC_SymbolInfo.h
@@ -21,7 +21,8 @@
                  int32_t matrixWidth,
                  int32_t matrixHeight,
                  int32_t dataRegions);
-  virtual ~CBC_SymbolInfo();
+  ~CBC_SymbolInfo() override;
+
   static void Initialize();
   static void Finalize();
   static void overrideSymbolSet(CBC_SymbolInfo* override);
diff --git a/xfa/fxbarcode/datamatrix/BC_SymbolShapeHint.h b/xfa/fxbarcode/datamatrix/BC_SymbolShapeHint.h
index 5dfac05..7cd4c86 100644
--- a/xfa/fxbarcode/datamatrix/BC_SymbolShapeHint.h
+++ b/xfa/fxbarcode/datamatrix/BC_SymbolShapeHint.h
@@ -11,6 +11,7 @@
  public:
   CBC_SymbolShapeHint();
   virtual ~CBC_SymbolShapeHint();
+
   enum SymbolShapeHint {
     FORCE_NONE,
     FORCE_SQUARE,
diff --git a/xfa/fxbarcode/datamatrix/BC_TextEncoder.h b/xfa/fxbarcode/datamatrix/BC_TextEncoder.h
index 1f97f3f..e6013b9 100644
--- a/xfa/fxbarcode/datamatrix/BC_TextEncoder.h
+++ b/xfa/fxbarcode/datamatrix/BC_TextEncoder.h
@@ -8,12 +8,15 @@
 #define XFA_FXBARCODE_DATAMATRIX_BC_TEXTENCODER_H_
 
 class CBC_TextEncoder;
+
 class CBC_TextEncoder : public CBC_C40Encoder {
  public:
   CBC_TextEncoder();
-  virtual ~CBC_TextEncoder();
-  int32_t getEncodingMode();
-  int32_t encodeChar(FX_WCHAR c, CFX_WideString& sb, int32_t& e);
+  ~CBC_TextEncoder() override;
+
+  // CBC_C40Encoder
+  int32_t getEncodingMode() override;
+  int32_t encodeChar(FX_WCHAR c, CFX_WideString& sb, int32_t& e) override;
 };
 
 #endif  // XFA_FXBARCODE_DATAMATRIX_BC_TEXTENCODER_H_
diff --git a/xfa/fxbarcode/datamatrix/BC_X12Encoder.h b/xfa/fxbarcode/datamatrix/BC_X12Encoder.h
index 5dccbb1..52239ce 100644
--- a/xfa/fxbarcode/datamatrix/BC_X12Encoder.h
+++ b/xfa/fxbarcode/datamatrix/BC_X12Encoder.h
@@ -12,13 +12,15 @@
 class CBC_X12Encoder : public CBC_C40Encoder {
  public:
   CBC_X12Encoder();
-  virtual ~CBC_X12Encoder();
-  int32_t getEncodingMode();
-  void Encode(CBC_EncoderContext& context, int32_t& e);
+  ~CBC_X12Encoder() override;
+
+  // CBC_C40Encoder
+  int32_t getEncodingMode() override;
+  void Encode(CBC_EncoderContext& context, int32_t& e) override;
   void handleEOD(CBC_EncoderContext& context,
                  CFX_WideString& buffer,
-                 int32_t& e);
-  int32_t encodeChar(FX_WCHAR c, CFX_WideString& sb, int32_t& e);
+                 int32_t& e) override;
+  int32_t encodeChar(FX_WCHAR c, CFX_WideString& sb, int32_t& e) override;
 };
 
 #endif  // XFA_FXBARCODE_DATAMATRIX_BC_X12ENCODER_H_
diff --git a/xfa/fxbarcode/oned/BC_OneDReader.cpp b/xfa/fxbarcode/oned/BC_OneDReader.cpp
index c66ec0b..53ff9a4 100644
--- a/xfa/fxbarcode/oned/BC_OneDReader.cpp
+++ b/xfa/fxbarcode/oned/BC_OneDReader.cpp
@@ -43,6 +43,12 @@
   BC_EXCEPTION_CHECK_ReturnValue(e, "");
   return strtemp;
 }
+CFX_ByteString CBC_OneDReader::DecodeRow(int32_t rowNumber,
+                                         CBC_CommonBitArray* row,
+                                         int32_t hints,
+                                         int32_t& e) {
+  return "";
+}
 CFX_ByteString CBC_OneDReader::DeDecode(CBC_BinaryBitmap* image,
                                         int32_t hints,
                                         int32_t& e) {
diff --git a/xfa/fxbarcode/oned/BC_OneDReader.h b/xfa/fxbarcode/oned/BC_OneDReader.h
index 2bab06e..77e0477 100644
--- a/xfa/fxbarcode/oned/BC_OneDReader.h
+++ b/xfa/fxbarcode/oned/BC_OneDReader.h
@@ -15,17 +15,18 @@
 class CBC_OneDReader : public CBC_Reader {
  public:
   CBC_OneDReader();
-  virtual ~CBC_OneDReader();
-  virtual CFX_ByteString Decode(CBC_BinaryBitmap* image, int32_t& e);
-  virtual CFX_ByteString Decode(CBC_BinaryBitmap* image,
-                                int32_t hints,
-                                int32_t& e);
+  ~CBC_OneDReader() override;
+
+  // CBC_Reader
+  CFX_ByteString Decode(CBC_BinaryBitmap* image, int32_t& e) override;
+  CFX_ByteString Decode(CBC_BinaryBitmap* image,
+                        int32_t hints,
+                        int32_t& e) override;
+
   virtual CFX_ByteString DecodeRow(int32_t rowNumber,
                                    CBC_CommonBitArray* row,
                                    int32_t hints,
-                                   int32_t& e) {
-    return "";
-  }
+                                   int32_t& e);
 
  private:
   CFX_ByteString DeDecode(CBC_BinaryBitmap* image, int32_t hints, int32_t& e);
diff --git a/xfa/fxbarcode/oned/BC_OneDimReader.h b/xfa/fxbarcode/oned/BC_OneDimReader.h
index f572d6f..bd46a18 100644
--- a/xfa/fxbarcode/oned/BC_OneDimReader.h
+++ b/xfa/fxbarcode/oned/BC_OneDimReader.h
@@ -26,17 +26,19 @@
   static const int32_t L_AND_G_PATTERNS[20][4];
 
   CBC_OneDimReader();
-  virtual ~CBC_OneDimReader();
+  ~CBC_OneDimReader() override;
 
+  // CBC_OneDReader
   CFX_ByteString DecodeRow(int32_t rowNumber,
                            CBC_CommonBitArray* row,
                            int32_t hints,
-                           int32_t& e);
-  CFX_ByteString DecodeRow(int32_t rowNumber,
-                           CBC_CommonBitArray* row,
-                           CFX_Int32Array* startGuardRange,
-                           int32_t hints,
-                           int32_t& e);
+                           int32_t& e) override;
+
+  virtual CFX_ByteString DecodeRow(int32_t rowNumber,
+                                   CBC_CommonBitArray* row,
+                                   CFX_Int32Array* startGuardRange,
+                                   int32_t hints,
+                                   int32_t& e);
 
  protected:
   CFX_Int32Array* FindStartGuardPattern(CBC_CommonBitArray* row, int32_t& e);
@@ -55,9 +57,7 @@
   virtual int32_t DecodeMiddle(CBC_CommonBitArray* row,
                                CFX_Int32Array* startRange,
                                CFX_ByteString& resultResult,
-                               int32_t& e) {
-    return 0;
-  }
+                               int32_t& e) = 0;
   virtual CFX_Int32Array* DecodeEnd(CBC_CommonBitArray* row,
                                     int32_t endStart,
                                     int32_t& e);
diff --git a/xfa/fxbarcode/oned/BC_OneDimWriter.cpp b/xfa/fxbarcode/oned/BC_OneDimWriter.cpp
index eee2893..109fb8f 100644
--- a/xfa/fxbarcode/oned/BC_OneDimWriter.cpp
+++ b/xfa/fxbarcode/oned/BC_OneDimWriter.cpp
@@ -101,6 +101,13 @@
   BC_EXCEPTION_CHECK_ReturnValue(e, nullptr);
   return ret;
 }
+
+uint8_t* CBC_OneDimWriter::Encode(const CFX_ByteString& contents,
+                                  int32_t& outLength,
+                                  int32_t& e) {
+  return nullptr;
+}
+
 int32_t CBC_OneDimWriter::AppendPattern(uint8_t* target,
                                         int32_t pos,
                                         const int32_t* pattern,
@@ -123,6 +130,7 @@
   }
   return numAdded;
 }
+
 void CBC_OneDimWriter::CalcTextInfo(const CFX_ByteString& text,
                                     FXTEXT_CHARPOS* charPos,
                                     CFX_Font* cFont,
@@ -361,6 +369,7 @@
     BC_EXCEPTION_CHECK_ReturnVoid(e);
   }
 }
+
 void CBC_OneDimWriter::RenderResult(const CFX_WideStringC& contents,
                                     uint8_t* code,
                                     int32_t codeLength,
@@ -436,3 +445,18 @@
     outputX += m_multiple;
   }
 }
+
+FX_BOOL CBC_OneDimWriter::CheckContentValidity(
+    const CFX_WideStringC& contents) {
+  return TRUE;
+}
+
+CFX_WideString CBC_OneDimWriter::FilterContents(
+    const CFX_WideStringC& contents) {
+  return CFX_WideString();
+}
+
+CFX_WideString CBC_OneDimWriter::RenderTextContents(
+    const CFX_WideStringC& contents) {
+  return CFX_WideString();
+}
diff --git a/xfa/fxbarcode/oned/BC_OneDimWriter.h b/xfa/fxbarcode/oned/BC_OneDimWriter.h
index a0a0762..10eccf9 100644
--- a/xfa/fxbarcode/oned/BC_OneDimWriter.h
+++ b/xfa/fxbarcode/oned/BC_OneDimWriter.h
@@ -18,24 +18,22 @@
 class CBC_OneDimWriter : public CBC_Writer {
  public:
   CBC_OneDimWriter();
-  virtual ~CBC_OneDimWriter();
+  ~CBC_OneDimWriter() override;
 
-  uint8_t* Encode(const CFX_ByteString& contents,
-                  BCFORMAT format,
-                  int32_t& outWidth,
-                  int32_t& outHeight,
-                  int32_t& e);
-  uint8_t* Encode(const CFX_ByteString& contents,
-                  BCFORMAT format,
-                  int32_t& outWidth,
-                  int32_t& outHeight,
-                  int32_t hints,
-                  int32_t& e);
+  virtual uint8_t* Encode(const CFX_ByteString& contents,
+                          BCFORMAT format,
+                          int32_t& outWidth,
+                          int32_t& outHeight,
+                          int32_t& e);
+  virtual uint8_t* Encode(const CFX_ByteString& contents,
+                          BCFORMAT format,
+                          int32_t& outWidth,
+                          int32_t& outHeight,
+                          int32_t hints,
+                          int32_t& e);
   virtual uint8_t* Encode(const CFX_ByteString& contents,
                           int32_t& outLength,
-                          int32_t& e) {
-    return nullptr;
-  }
+                          int32_t& e);
 
   virtual void RenderResult(const CFX_WideStringC& contents,
                             uint8_t* code,
@@ -49,30 +47,24 @@
                                   const CFX_Matrix* matrix,
                                   const CFX_WideStringC& contents,
                                   int32_t& e);
-  virtual FX_BOOL CheckContentValidity(const CFX_WideStringC& contents) {
-    return TRUE;
-  }
-  virtual CFX_WideString FilterContents(const CFX_WideStringC& contents) {
-    return CFX_WideString();
-  }
-  virtual CFX_WideString RenderTextContents(const CFX_WideStringC& contents) {
-    return CFX_WideString();
-  }
+  virtual FX_BOOL CheckContentValidity(const CFX_WideStringC& contents);
+  virtual CFX_WideString FilterContents(const CFX_WideStringC& contents);
+  virtual CFX_WideString RenderTextContents(const CFX_WideStringC& contents);
   virtual void SetPrintChecksum(FX_BOOL checksum);
   virtual void SetDataLength(int32_t length);
   virtual void SetCalcChecksum(int32_t state);
   virtual void SetFontSize(FX_FLOAT size);
   virtual void SetFontStyle(int32_t style);
   virtual void SetFontColor(FX_ARGB color);
-  virtual FX_BOOL SetFont(CFX_Font* cFont);
+  FX_BOOL SetFont(CFX_Font* cFont);
 
  protected:
-  void CalcTextInfo(const CFX_ByteString& text,
-                    FXTEXT_CHARPOS* charPos,
-                    CFX_Font* cFont,
-                    FX_FLOAT geWidth,
-                    int32_t fontSize,
-                    FX_FLOAT& charsLen);
+  virtual void CalcTextInfo(const CFX_ByteString& text,
+                            FXTEXT_CHARPOS* charPos,
+                            CFX_Font* cFont,
+                            FX_FLOAT geWidth,
+                            int32_t fontSize,
+                            FX_FLOAT& charsLen);
   virtual void ShowChars(const CFX_WideStringC& contents,
                          CFX_DIBitmap* pOutBitmap,
                          CFX_RenderDevice* device,
@@ -95,12 +87,13 @@
                                FX_FLOAT locX,
                                FX_FLOAT locY,
                                int32_t barWidth);
-  int32_t AppendPattern(uint8_t* target,
-                        int32_t pos,
-                        const int32_t* pattern,
-                        int32_t patternLength,
-                        int32_t startColor,
-                        int32_t& e);
+  virtual int32_t AppendPattern(uint8_t* target,
+                                int32_t pos,
+                                const int32_t* pattern,
+                                int32_t patternLength,
+                                int32_t startColor,
+                                int32_t& e);
+
   FX_WCHAR Upper(FX_WCHAR ch);
 
   FX_BOOL m_bPrintChecksum;
diff --git a/xfa/fxbarcode/oned/BC_OnedCodaBarReader.h b/xfa/fxbarcode/oned/BC_OnedCodaBarReader.h
index 8fd2177..ce902bf 100644
--- a/xfa/fxbarcode/oned/BC_OnedCodaBarReader.h
+++ b/xfa/fxbarcode/oned/BC_OnedCodaBarReader.h
@@ -16,11 +16,14 @@
 class CBC_OnedCodaBarReader : public CBC_OneDReader {
  public:
   CBC_OnedCodaBarReader();
-  virtual ~CBC_OnedCodaBarReader();
+  ~CBC_OnedCodaBarReader() override;
+
+  // CBC_OneDReader
   CFX_ByteString DecodeRow(int32_t rowNumber,
                            CBC_CommonBitArray* row,
                            int32_t hints,
-                           int32_t& e);
+                           int32_t& e) override;
+
   CFX_Int32Array* FindAsteriskPattern(CBC_CommonBitArray* row, int32_t& e);
   FX_BOOL ArrayContains(const FX_CHAR array[], FX_CHAR key);
   FX_CHAR ToNarrowWidePattern(CFX_Int32Array* counter);
diff --git a/xfa/fxbarcode/oned/BC_OnedCodaBarWriter.h b/xfa/fxbarcode/oned/BC_OnedCodaBarWriter.h
index d136017..99c6bfb 100644
--- a/xfa/fxbarcode/oned/BC_OnedCodaBarWriter.h
+++ b/xfa/fxbarcode/oned/BC_OnedCodaBarWriter.h
@@ -15,32 +15,33 @@
 class CBC_OnedCodaBarWriter : public CBC_OneDimWriter {
  public:
   CBC_OnedCodaBarWriter();
-  virtual ~CBC_OnedCodaBarWriter();
+  ~CBC_OnedCodaBarWriter() override;
 
+  // CBC_OneDimWriter
   uint8_t* Encode(const CFX_ByteString& contents,
                   int32_t& outLength,
-                  int32_t& e);
+                  int32_t& e) override;
   uint8_t* Encode(const CFX_ByteString& contents,
                   BCFORMAT format,
                   int32_t& outWidth,
                   int32_t& outHeight,
-                  int32_t& e);
+                  int32_t& e) override;
   uint8_t* Encode(const CFX_ByteString& contents,
                   BCFORMAT format,
                   int32_t& outWidth,
                   int32_t& outHeight,
                   int32_t hints,
-                  int32_t& e);
+                  int32_t& e) override;
+  FX_BOOL CheckContentValidity(const CFX_WideStringC& contents) override;
+  CFX_WideString FilterContents(const CFX_WideStringC& contents) override;
+  void SetDataLength(int32_t length) override;
 
-  CFX_WideString encodedContents(const CFX_WideStringC& contents);
-  FX_BOOL CheckContentValidity(const CFX_WideStringC& contents);
-  CFX_WideString FilterContents(const CFX_WideStringC& contents);
-  FX_BOOL SetStartChar(FX_CHAR start);
-  FX_BOOL SetEndChar(FX_CHAR end);
-  void SetDataLength(int32_t length);
-  FX_BOOL SetTextLocation(BC_TEXT_LOC location);
-  FX_BOOL SetWideNarrowRatio(int32_t ratio);
-  FX_BOOL FindChar(FX_WCHAR ch, FX_BOOL isContent);
+  virtual CFX_WideString encodedContents(const CFX_WideStringC& contents);
+  virtual FX_BOOL SetStartChar(FX_CHAR start);
+  virtual FX_BOOL SetEndChar(FX_CHAR end);
+  virtual FX_BOOL SetTextLocation(BC_TEXT_LOC location);
+  virtual FX_BOOL SetWideNarrowRatio(int32_t ratio);
+  virtual FX_BOOL FindChar(FX_WCHAR ch, FX_BOOL isContent);
 
  private:
   static const FX_CHAR START_END_CHARS[];
@@ -50,7 +51,7 @@
                     uint8_t* code,
                     int32_t codeLength,
                     FX_BOOL isDevice,
-                    int32_t& e);
+                    int32_t& e) override;
 
   FX_CHAR m_chStart;
   FX_CHAR m_chEnd;
diff --git a/xfa/fxbarcode/oned/BC_OnedCode128Reader.h b/xfa/fxbarcode/oned/BC_OnedCode128Reader.h
index df21d7a..b63b054 100644
--- a/xfa/fxbarcode/oned/BC_OnedCode128Reader.h
+++ b/xfa/fxbarcode/oned/BC_OnedCode128Reader.h
@@ -14,11 +14,13 @@
 class CBC_OnedCode128Reader : public CBC_OneDReader {
  public:
   CBC_OnedCode128Reader();
-  virtual ~CBC_OnedCode128Reader();
-  virtual CFX_ByteString DecodeRow(int32_t rowNumber,
-                                   CBC_CommonBitArray* row,
-                                   int32_t hints,
-                                   int32_t& e);
+  ~CBC_OnedCode128Reader() override;
+
+  // CBC_OneDReader
+  CFX_ByteString DecodeRow(int32_t rowNumber,
+                           CBC_CommonBitArray* row,
+                           int32_t hints,
+                           int32_t& e) override;
 
   static const int32_t CODE_PATTERNS[107][7];
 
diff --git a/xfa/fxbarcode/oned/BC_OnedCode128Writer.h b/xfa/fxbarcode/oned/BC_OnedCode128Writer.h
index b253064..7338b56 100644
--- a/xfa/fxbarcode/oned/BC_OnedCode128Writer.h
+++ b/xfa/fxbarcode/oned/BC_OnedCode128Writer.h
@@ -15,26 +15,29 @@
  public:
   CBC_OnedCode128Writer();
   explicit CBC_OnedCode128Writer(BC_TYPE type);
-  virtual ~CBC_OnedCode128Writer();
+  ~CBC_OnedCode128Writer() override;
 
+  // CBC_OneDimWriter
   uint8_t* Encode(const CFX_ByteString& contents,
                   BCFORMAT format,
                   int32_t& outWidth,
                   int32_t& outHeight,
                   int32_t hints,
-                  int32_t& e);
+                  int32_t& e) override;
   uint8_t* Encode(const CFX_ByteString& contents,
                   BCFORMAT format,
                   int32_t& outWidth,
                   int32_t& outHeight,
-                  int32_t& e);
+                  int32_t& e) override;
   uint8_t* Encode(const CFX_ByteString& contents,
                   int32_t& outLength,
-                  int32_t& e);
+                  int32_t& e) override;
 
-  FX_BOOL CheckContentValidity(const CFX_WideStringC& contents);
-  CFX_WideString FilterContents(const CFX_WideStringC& contents);
+  FX_BOOL CheckContentValidity(const CFX_WideStringC& contents) override;
+  CFX_WideString FilterContents(const CFX_WideStringC& contents) override;
+
   FX_BOOL SetTextLocation(BC_TEXT_LOC location);
+
   BC_TYPE GetType();
 
  private:
diff --git a/xfa/fxbarcode/oned/BC_OnedCode39Reader.h b/xfa/fxbarcode/oned/BC_OnedCode39Reader.h
index 0d4591f..0e1a728 100644
--- a/xfa/fxbarcode/oned/BC_OnedCode39Reader.h
+++ b/xfa/fxbarcode/oned/BC_OnedCode39Reader.h
@@ -22,12 +22,13 @@
   CBC_OnedCode39Reader();
   explicit CBC_OnedCode39Reader(FX_BOOL usingCheckDigit);
   CBC_OnedCode39Reader(FX_BOOL usingCheckDigit, FX_BOOL extendedMode);
-  virtual ~CBC_OnedCode39Reader();
+  ~CBC_OnedCode39Reader() override;
 
+  // CBC_OneDReader
   CFX_ByteString DecodeRow(int32_t rowNumber,
                            CBC_CommonBitArray* row,
                            int32_t hints,
-                           int32_t& e);
+                           int32_t& e) override;
 
  private:
   CFX_Int32Array* FindAsteriskPattern(CBC_CommonBitArray* row, int32_t& e);
diff --git a/xfa/fxbarcode/oned/BC_OnedCode39Writer.h b/xfa/fxbarcode/oned/BC_OnedCode39Writer.h
index f2c340b..7dc314f 100644
--- a/xfa/fxbarcode/oned/BC_OnedCode39Writer.h
+++ b/xfa/fxbarcode/oned/BC_OnedCode39Writer.h
@@ -14,37 +14,41 @@
  public:
   CBC_OnedCode39Writer();
   explicit CBC_OnedCode39Writer(FX_BOOL extendedMode);
-  virtual ~CBC_OnedCode39Writer();
+  ~CBC_OnedCode39Writer() override;
 
+  // CBC_OneDimWriter
   uint8_t* Encode(const CFX_ByteString& contents,
                   BCFORMAT format,
                   int32_t& outWidth,
                   int32_t& outHeight,
-                  int32_t& e);
+                  int32_t& e) override;
   uint8_t* Encode(const CFX_ByteString& contents,
                   BCFORMAT format,
                   int32_t& outWidth,
                   int32_t& outHeight,
                   int32_t hints,
-                  int32_t& e);
+                  int32_t& e) override;
   uint8_t* Encode(const CFX_ByteString& contents,
                   int32_t& outLength,
-                  int32_t& e);
+                  int32_t& e) override;
   void RenderResult(const CFX_WideStringC& contents,
                     uint8_t* code,
                     int32_t codeLength,
                     FX_BOOL isDevice,
-                    int32_t& e);
+                    int32_t& e) override;
+  FX_BOOL CheckContentValidity(const CFX_WideStringC& contents) override;
+  CFX_WideString FilterContents(const CFX_WideStringC& contents) override;
+  CFX_WideString RenderTextContents(const CFX_WideStringC& contents) override;
 
-  CFX_WideString encodedContents(const CFX_WideStringC& contents, int32_t& e);
-  FX_BOOL CheckContentValidity(const CFX_WideStringC& contents);
-  FX_BOOL CheckExtendedContentValidity(const CFX_WideStringC& contents);
-  CFX_WideString FilterContents(const CFX_WideStringC& contents);
-  CFX_WideString FilterExtendedContents(const CFX_WideStringC& contents);
-  CFX_WideString RenderTextContents(const CFX_WideStringC& contents);
-  CFX_WideString RenderExtendedTextContents(const CFX_WideStringC& contents);
-  FX_BOOL SetTextLocation(BC_TEXT_LOC loction);
-  FX_BOOL SetWideNarrowRatio(int32_t ratio);
+  virtual CFX_WideString encodedContents(const CFX_WideStringC& contents,
+                                         int32_t& e);
+  virtual FX_BOOL CheckExtendedContentValidity(const CFX_WideStringC& contents);
+  virtual CFX_WideString FilterExtendedContents(
+      const CFX_WideStringC& contents);
+  virtual CFX_WideString RenderExtendedTextContents(
+      const CFX_WideStringC& contents);
+  virtual FX_BOOL SetTextLocation(BC_TEXT_LOC loction);
+  virtual FX_BOOL SetWideNarrowRatio(int32_t ratio);
 
  private:
   void ToIntArray(int32_t a, int32_t* toReturn);
diff --git a/xfa/fxbarcode/oned/BC_OnedEAN13Reader.h b/xfa/fxbarcode/oned/BC_OnedEAN13Reader.h
index 5656540..ac53fd4 100644
--- a/xfa/fxbarcode/oned/BC_OnedEAN13Reader.h
+++ b/xfa/fxbarcode/oned/BC_OnedEAN13Reader.h
@@ -16,15 +16,10 @@
 
 class CBC_OnedEAN13Reader : public CBC_OneDimReader {
  public:
-  static const int32_t FIRST_DIGIT_ENCODINGS[10];
-
   CBC_OnedEAN13Reader();
-  virtual ~CBC_OnedEAN13Reader();
+  ~CBC_OnedEAN13Reader() override;
 
- private:
-  void DetermineFirstDigit(CFX_ByteString& result,
-                           int32_t lgPatternFound,
-                           int32_t& e);
+  static const int32_t FIRST_DIGIT_ENCODINGS[10];
 
  protected:
   friend class CBC_OnedUPCAReader;
@@ -32,7 +27,12 @@
   int32_t DecodeMiddle(CBC_CommonBitArray* row,
                        CFX_Int32Array* startRange,
                        CFX_ByteString& resultString,
-                       int32_t& e);
+                       int32_t& e) override;
+
+ private:
+  void DetermineFirstDigit(CFX_ByteString& result,
+                           int32_t lgPatternFound,
+                           int32_t& e);
 };
 
 #endif  // XFA_FXBARCODE_ONED_BC_ONEDEAN13READER_H_
diff --git a/xfa/fxbarcode/oned/BC_OnedEAN13Writer.h b/xfa/fxbarcode/oned/BC_OnedEAN13Writer.h
index 75debc2..b2b85d2 100644
--- a/xfa/fxbarcode/oned/BC_OnedEAN13Writer.h
+++ b/xfa/fxbarcode/oned/BC_OnedEAN13Writer.h
@@ -17,30 +17,31 @@
 class CBC_OnedEAN13Writer : public CBC_OneDimWriter {
  public:
   CBC_OnedEAN13Writer();
-  virtual ~CBC_OnedEAN13Writer();
+  ~CBC_OnedEAN13Writer() override;
 
+  // CBC_OneDimWriter
   uint8_t* Encode(const CFX_ByteString& contents,
                   BCFORMAT format,
                   int32_t& outWidth,
                   int32_t& outHeight,
-                  int32_t& e);
+                  int32_t& e) override;
   uint8_t* Encode(const CFX_ByteString& contents,
                   BCFORMAT format,
                   int32_t& outWidth,
                   int32_t& outHeight,
                   int32_t hints,
-                  int32_t& e);
+                  int32_t& e) override;
   uint8_t* Encode(const CFX_ByteString& contents,
                   int32_t& outLength,
-                  int32_t& e);
-
+                  int32_t& e) override;
   void RenderResult(const CFX_WideStringC& contents,
                     uint8_t* code,
                     int32_t codeLength,
                     FX_BOOL isDevice,
-                    int32_t& e);
-  FX_BOOL CheckContentValidity(const CFX_WideStringC& contents);
-  CFX_WideString FilterContents(const CFX_WideStringC& contents);
+                    int32_t& e) override;
+  FX_BOOL CheckContentValidity(const CFX_WideStringC& contents) override;
+  CFX_WideString FilterContents(const CFX_WideStringC& contents) override;
+
   int32_t CalcChecksum(const CFX_ByteString& contents);
 
  protected:
@@ -50,7 +51,7 @@
                  const CFX_Matrix* matrix,
                  int32_t barWidth,
                  int32_t multiple,
-                 int32_t& e);
+                 int32_t& e) override;
 
  private:
   int32_t m_codeWidth;
diff --git a/xfa/fxbarcode/oned/BC_OnedEAN8Reader.h b/xfa/fxbarcode/oned/BC_OnedEAN8Reader.h
index ab2d5e3..756565d 100644
--- a/xfa/fxbarcode/oned/BC_OnedEAN8Reader.h
+++ b/xfa/fxbarcode/oned/BC_OnedEAN8Reader.h
@@ -14,13 +14,13 @@
 class CBC_OnedEAN8Reader : public CBC_OneDimReader {
  public:
   CBC_OnedEAN8Reader();
-  virtual ~CBC_OnedEAN8Reader();
+  ~CBC_OnedEAN8Reader() override;
 
  protected:
   int32_t DecodeMiddle(CBC_CommonBitArray*,
                        CFX_Int32Array* startRange,
                        CFX_ByteString& result,
-                       int32_t& e);
+                       int32_t& e) override;
 };
 
 #endif  // XFA_FXBARCODE_ONED_BC_ONEDEAN8READER_H_
diff --git a/xfa/fxbarcode/oned/BC_OnedEAN8Writer.h b/xfa/fxbarcode/oned/BC_OnedEAN8Writer.h
index 706393e..dab1b25 100644
--- a/xfa/fxbarcode/oned/BC_OnedEAN8Writer.h
+++ b/xfa/fxbarcode/oned/BC_OnedEAN8Writer.h
@@ -16,36 +16,35 @@
 class CFX_RenderDevice;
 
 class CBC_OnedEAN8Writer : public CBC_OneDimWriter {
- private:
-  int32_t m_codeWidth;
-
  public:
   CBC_OnedEAN8Writer();
-  virtual ~CBC_OnedEAN8Writer();
+  ~CBC_OnedEAN8Writer() override;
 
+  // CBC_OneDimWriter
   uint8_t* Encode(const CFX_ByteString& contents,
                   BCFORMAT format,
                   int32_t& outWidth,
                   int32_t& outHeight,
-                  int32_t& e);
+                  int32_t& e) override;
   uint8_t* Encode(const CFX_ByteString& contents,
                   BCFORMAT format,
                   int32_t& outWidth,
                   int32_t& outHeight,
                   int32_t hints,
-                  int32_t& e);
+                  int32_t& e) override;
   uint8_t* Encode(const CFX_ByteString& contents,
                   int32_t& outLength,
-                  int32_t& e);
+                  int32_t& e) override;
 
   void RenderResult(const CFX_WideStringC& contents,
                     uint8_t* code,
                     int32_t codeLength,
                     FX_BOOL isDevice,
-                    int32_t& e);
-  FX_BOOL CheckContentValidity(const CFX_WideStringC& contents);
-  CFX_WideString FilterContents(const CFX_WideStringC& contents);
-  void SetDataLength(int32_t length);
+                    int32_t& e) override;
+  FX_BOOL CheckContentValidity(const CFX_WideStringC& contents) override;
+  CFX_WideString FilterContents(const CFX_WideStringC& contents) override;
+  void SetDataLength(int32_t length) override;
+
   FX_BOOL SetTextLocation(BC_TEXT_LOC location);
   int32_t CalcChecksum(const CFX_ByteString& contents);
 
@@ -56,7 +55,10 @@
                  const CFX_Matrix* matrix,
                  int32_t barWidth,
                  int32_t multiple,
-                 int32_t& e);
+                 int32_t& e) override;
+
+ private:
+  int32_t m_codeWidth;
 };
 
 #endif  // XFA_FXBARCODE_ONED_BC_ONEDEAN8WRITER_H_
diff --git a/xfa/fxbarcode/oned/BC_OnedUPCAReader.h b/xfa/fxbarcode/oned/BC_OnedUPCAReader.h
index c073930..28e03fc 100644
--- a/xfa/fxbarcode/oned/BC_OnedUPCAReader.h
+++ b/xfa/fxbarcode/oned/BC_OnedUPCAReader.h
@@ -18,27 +18,32 @@
 class CBC_OnedUPCAReader : public CBC_OneDimReader {
  public:
   CBC_OnedUPCAReader();
-  virtual ~CBC_OnedUPCAReader();
+  ~CBC_OnedUPCAReader() override;
 
   virtual void Init();
 
+  // CBC_OneDimReader
   CFX_ByteString DecodeRow(int32_t rowNumber,
                            CBC_CommonBitArray* row,
                            int32_t hints,
-                           int32_t& e);
+                           int32_t& e) override;
   CFX_ByteString DecodeRow(int32_t rowNumber,
                            CBC_CommonBitArray* row,
                            CFX_Int32Array* startGuardRange,
                            int32_t hints,
-                           int32_t& e);
-  CFX_ByteString Decode(CBC_BinaryBitmap* image, int32_t& e);
-  CFX_ByteString Decode(CBC_BinaryBitmap* image, int32_t hints, int32_t& e);
+                           int32_t& e) override;
+
+  // CBC_OneDReader
+  CFX_ByteString Decode(CBC_BinaryBitmap* image, int32_t& e) override;
+  CFX_ByteString Decode(CBC_BinaryBitmap* image,
+                        int32_t hints,
+                        int32_t& e) override;
 
  protected:
   int32_t DecodeMiddle(CBC_CommonBitArray* row,
                        CFX_Int32Array* startRange,
                        CFX_ByteString& resultString,
-                       int32_t& e);
+                       int32_t& e) override;
   CFX_ByteString MaybeReturnResult(CFX_ByteString& result, int32_t& e);
 
  private:
diff --git a/xfa/fxbarcode/oned/BC_OnedUPCAWriter.cpp b/xfa/fxbarcode/oned/BC_OnedUPCAWriter.cpp
index 580e1a8..2b06c85 100644
--- a/xfa/fxbarcode/oned/BC_OnedUPCAWriter.cpp
+++ b/xfa/fxbarcode/oned/BC_OnedUPCAWriter.cpp
@@ -105,6 +105,12 @@
   return ret;
 }
 
+uint8_t* CBC_OnedUPCAWriter::Encode(const CFX_ByteString& contents,
+                                    int32_t& outLength,
+                                    int32_t& e) {
+  return nullptr;
+}
+
 void CBC_OnedUPCAWriter::ShowChars(const CFX_WideStringC& contents,
                                    CFX_DIBitmap* pOutBitmap,
                                    CFX_RenderDevice* device,
diff --git a/xfa/fxbarcode/oned/BC_OnedUPCAWriter.h b/xfa/fxbarcode/oned/BC_OnedUPCAWriter.h
index 45d4eac..8257dfa 100644
--- a/xfa/fxbarcode/oned/BC_OnedUPCAWriter.h
+++ b/xfa/fxbarcode/oned/BC_OnedUPCAWriter.h
@@ -19,34 +19,33 @@
 class CBC_OnedUPCAWriter : public CBC_OneDimWriter {
  public:
   CBC_OnedUPCAWriter();
-  virtual ~CBC_OnedUPCAWriter();
+  ~CBC_OnedUPCAWriter() override;
 
   virtual void Init();
 
+  // CBC_OneDimWriter
   uint8_t* Encode(const CFX_ByteString& contents,
                   BCFORMAT format,
                   int32_t& outWidth,
                   int32_t& outHeight,
-                  int32_t& e);
+                  int32_t& e) override;
   uint8_t* Encode(const CFX_ByteString& contents,
                   BCFORMAT format,
                   int32_t& outWidth,
                   int32_t& outHeight,
                   int32_t hints,
-                  int32_t& e);
+                  int32_t& e) override;
   uint8_t* Encode(const CFX_ByteString& contents,
                   int32_t& outLength,
-                  int32_t& e) {
-    return nullptr;
-  }
+                  int32_t& e) override;
 
   void RenderResult(const CFX_WideStringC& contents,
                     uint8_t* code,
                     int32_t codeLength,
                     FX_BOOL isDevice,
-                    int32_t& e);
-  FX_BOOL CheckContentValidity(const CFX_WideStringC& contents);
-  CFX_WideString FilterContents(const CFX_WideStringC& contents);
+                    int32_t& e) override;
+  FX_BOOL CheckContentValidity(const CFX_WideStringC& contents) override;
+  CFX_WideString FilterContents(const CFX_WideStringC& contents) override;
   int32_t CalcChecksum(const CFX_ByteString& contents);
 
  protected:
@@ -56,7 +55,7 @@
                  const CFX_Matrix* matrix,
                  int32_t barWidth,
                  int32_t multiple,
-                 int32_t& e);
+                 int32_t& e) override;
 
  private:
   CBC_OnedEAN13Writer* m_subWriter;
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417.h b/xfa/fxbarcode/pdf417/BC_PDF417.h
index 2e46f80..f2fb5cb 100644
--- a/xfa/fxbarcode/pdf417/BC_PDF417.h
+++ b/xfa/fxbarcode/pdf417/BC_PDF417.h
@@ -18,6 +18,7 @@
   CBC_PDF417();
   CBC_PDF417(FX_BOOL compact);
   virtual ~CBC_PDF417();
+
   CBC_BarcodeMatrix* getBarcodeMatrix();
   void generateBarcodeLogic(CFX_WideString msg,
                             int32_t errorCorrectionLevel,
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.h b/xfa/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.h
index c86f714..16da60f 100644
--- a/xfa/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.h
+++ b/xfa/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.h
@@ -16,6 +16,7 @@
   CBC_BarcodeMatrix();
   CBC_BarcodeMatrix(int32_t height, int32_t width);
   virtual ~CBC_BarcodeMatrix();
+
   void set(int32_t x, int32_t y, uint8_t value);
   void setMatrix(int32_t x, int32_t y, FX_BOOL black);
   void startRow();
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417BarcodeMetadata.h b/xfa/fxbarcode/pdf417/BC_PDF417BarcodeMetadata.h
index 2b398f1..07072e5 100644
--- a/xfa/fxbarcode/pdf417/BC_PDF417BarcodeMetadata.h
+++ b/xfa/fxbarcode/pdf417/BC_PDF417BarcodeMetadata.h
@@ -16,6 +16,7 @@
                       int32_t rowCountLowerPart,
                       int32_t errorCorrectionLevel);
   virtual ~CBC_BarcodeMetadata();
+
   int32_t getColumnCount();
   int32_t getErrorCorrectionLevel();
   int32_t getRowCount();
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417BarcodeRow.h b/xfa/fxbarcode/pdf417/BC_PDF417BarcodeRow.h
index 80d931b..9bf1b3c 100644
--- a/xfa/fxbarcode/pdf417/BC_PDF417BarcodeRow.h
+++ b/xfa/fxbarcode/pdf417/BC_PDF417BarcodeRow.h
@@ -13,6 +13,7 @@
  public:
   CBC_BarcodeRow(int32_t width);
   virtual ~CBC_BarcodeRow();
+
   void set(int32_t x, uint8_t value);
   void set(int32_t x, FX_BOOL black);
   void addBar(FX_BOOL black, int32_t width);
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417BoundingBox.h b/xfa/fxbarcode/pdf417/BC_PDF417BoundingBox.h
index 3ae0e10..69a43e0 100644
--- a/xfa/fxbarcode/pdf417/BC_PDF417BoundingBox.h
+++ b/xfa/fxbarcode/pdf417/BC_PDF417BoundingBox.h
@@ -22,6 +22,7 @@
                   int32_t& e);
   CBC_BoundingBox(CBC_BoundingBox* boundingBox);
   virtual ~CBC_BoundingBox();
+
   static CBC_BoundingBox* merge(CBC_BoundingBox* leftBox,
                                 CBC_BoundingBox* rightBox,
                                 int32_t& e);
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417Codeword.h b/xfa/fxbarcode/pdf417/BC_PDF417Codeword.h
index d397485..2423cab 100644
--- a/xfa/fxbarcode/pdf417/BC_PDF417Codeword.h
+++ b/xfa/fxbarcode/pdf417/BC_PDF417Codeword.h
@@ -13,6 +13,7 @@
  public:
   CBC_Codeword(int32_t startX, int32_t endX, int32_t bucket, int32_t value);
   virtual ~CBC_Codeword();
+
   FX_BOOL hasValidRowNumber();
   FX_BOOL isValidRowNumber(int32_t rowNumber);
   void setRowNumberAsRowIndicatorColumn();
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417CodewordDecoder.h b/xfa/fxbarcode/pdf417/BC_PDF417CodewordDecoder.h
index 4c31b31..ed0c235 100644
--- a/xfa/fxbarcode/pdf417/BC_PDF417CodewordDecoder.h
+++ b/xfa/fxbarcode/pdf417/BC_PDF417CodewordDecoder.h
@@ -13,6 +13,7 @@
  public:
   CBC_PDF417CodewordDecoder();
   virtual ~CBC_PDF417CodewordDecoder();
+
   static void Initialize();
   static void Finalize();
   static int32_t getDecodedValue(CFX_Int32Array& moduleBitCount);
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417Common.h b/xfa/fxbarcode/pdf417/BC_PDF417Common.h
index c72d664..4905072 100644
--- a/xfa/fxbarcode/pdf417/BC_PDF417Common.h
+++ b/xfa/fxbarcode/pdf417/BC_PDF417Common.h
@@ -13,6 +13,7 @@
  public:
   CBC_PDF417Common();
   virtual ~CBC_PDF417Common();
+
   static int32_t getBitCountSum(CFX_Int32Array& moduleBitCount);
   static int32_t getCodeword(uint32_t symbol);
   static const int32_t NUMBER_OF_CODEWORDS = 929;
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417DecodedBitStreamParser.h b/xfa/fxbarcode/pdf417/BC_PDF417DecodedBitStreamParser.h
index e08fb15..e32103e 100644
--- a/xfa/fxbarcode/pdf417/BC_PDF417DecodedBitStreamParser.h
+++ b/xfa/fxbarcode/pdf417/BC_PDF417DecodedBitStreamParser.h
@@ -17,6 +17,7 @@
  public:
   CBC_DecodedBitStreamPaser();
   virtual ~CBC_DecodedBitStreamPaser();
+
   static void Initialize();
   static void Finalize();
   static CBC_CommonDecoderResult* decode(CFX_Int32Array& codewords,
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417DetectionResult.h b/xfa/fxbarcode/pdf417/BC_PDF417DetectionResult.h
index 1590ce2..e5cad81 100644
--- a/xfa/fxbarcode/pdf417/BC_PDF417DetectionResult.h
+++ b/xfa/fxbarcode/pdf417/BC_PDF417DetectionResult.h
@@ -16,6 +16,7 @@
   CBC_DetectionResult(CBC_BarcodeMetadata* barcodeMetadata,
                       CBC_BoundingBox* boundingBox);
   virtual ~CBC_DetectionResult();
+
   CFX_ArrayTemplate<CBC_DetectionResultColumn*>& getDetectionResultColumns();
   void setBoundingBox(CBC_BoundingBox* boundingBox);
   CBC_BoundingBox* getBoundingBox();
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417DetectionResultRowIndicatorColumn.h b/xfa/fxbarcode/pdf417/BC_PDF417DetectionResultRowIndicatorColumn.h
index f914354..23fbe74 100644
--- a/xfa/fxbarcode/pdf417/BC_PDF417DetectionResultRowIndicatorColumn.h
+++ b/xfa/fxbarcode/pdf417/BC_PDF417DetectionResultRowIndicatorColumn.h
@@ -14,7 +14,8 @@
  public:
   CBC_DetectionResultRowIndicatorColumn(CBC_BoundingBox* boundingBox,
                                         FX_BOOL isLeft);
-  virtual ~CBC_DetectionResultRowIndicatorColumn();
+  ~CBC_DetectionResultRowIndicatorColumn() override;
+
   void setRowNumbers();
   int32_t adjustCompleteIndicatorColumnRowNumbers(
       CBC_BarcodeMetadata barcodeMetadata);
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417Detector.h b/xfa/fxbarcode/pdf417/BC_PDF417Detector.h
index c6fa6f6..c7c21b2 100644
--- a/xfa/fxbarcode/pdf417/BC_PDF417Detector.h
+++ b/xfa/fxbarcode/pdf417/BC_PDF417Detector.h
@@ -17,6 +17,7 @@
  public:
   CBC_Detector();
   virtual ~CBC_Detector();
+
   static CBC_PDF417DetectorResult* detect(CBC_BinaryBitmap* image,
                                           int32_t hints,
                                           FX_BOOL multiple,
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417Dimensions.h b/xfa/fxbarcode/pdf417/BC_PDF417Dimensions.h
index 622ad23..dedbea3 100644
--- a/xfa/fxbarcode/pdf417/BC_PDF417Dimensions.h
+++ b/xfa/fxbarcode/pdf417/BC_PDF417Dimensions.h
@@ -16,6 +16,7 @@
                  int32_t minRows,
                  int32_t maxRows);
   virtual ~CBC_Dimensions();
+
   int32_t getMinCols();
   int32_t getMaxCols();
   int32_t getMinRows();
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417ECErrorCorrection.h b/xfa/fxbarcode/pdf417/BC_PDF417ECErrorCorrection.h
index 95e691a..2503311 100644
--- a/xfa/fxbarcode/pdf417/BC_PDF417ECErrorCorrection.h
+++ b/xfa/fxbarcode/pdf417/BC_PDF417ECErrorCorrection.h
@@ -13,6 +13,7 @@
  public:
   CBC_PDF417ECErrorCorrection();
   virtual ~CBC_PDF417ECErrorCorrection();
+
   static void Initialize(int32_t& e);
   static void Finalize();
   static int32_t decode(CFX_Int32Array& received,
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417ECModulusGF.h b/xfa/fxbarcode/pdf417/BC_PDF417ECModulusGF.h
index 094e001..3614f53 100644
--- a/xfa/fxbarcode/pdf417/BC_PDF417ECModulusGF.h
+++ b/xfa/fxbarcode/pdf417/BC_PDF417ECModulusGF.h
@@ -12,6 +12,7 @@
  public:
   CBC_PDF417ECModulusGF(int32_t modulus, int32_t generator, int32_t& e);
   virtual ~CBC_PDF417ECModulusGF();
+
   static void Initialize(int32_t& e);
   static void Finalize();
   CBC_PDF417ECModulusPoly* getZero();
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417ErrorCorrection.h b/xfa/fxbarcode/pdf417/BC_PDF417ErrorCorrection.h
index b976386..20717b1 100644
--- a/xfa/fxbarcode/pdf417/BC_PDF417ErrorCorrection.h
+++ b/xfa/fxbarcode/pdf417/BC_PDF417ErrorCorrection.h
@@ -15,6 +15,7 @@
  public:
   CBC_PDF417ErrorCorrection();
   virtual ~CBC_PDF417ErrorCorrection();
+
   static int32_t getErrorCorrectionCodewordCount(int32_t errorCorrectionLevel,
                                                  int32_t& e);
   static int32_t getRecommendedMinimumErrorCorrectionLevel(int32_t n,
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417Reader.h b/xfa/fxbarcode/pdf417/BC_PDF417Reader.h
index 73499b9..193d7ef 100644
--- a/xfa/fxbarcode/pdf417/BC_PDF417Reader.h
+++ b/xfa/fxbarcode/pdf417/BC_PDF417Reader.h
@@ -17,13 +17,18 @@
 class CBC_PDF417Reader : public CBC_Reader {
  public:
   CBC_PDF417Reader();
-  virtual ~CBC_PDF417Reader();
-  CFX_ByteString Decode(CBC_BinaryBitmap* image, int32_t& e);
+  ~CBC_PDF417Reader() override;
+
+  // CBC_Reader
+  CFX_ByteString Decode(CBC_BinaryBitmap* image, int32_t& e) override;
+  CFX_ByteString Decode(CBC_BinaryBitmap* image,
+                        int32_t hints,
+                        int32_t& e) override;
+
   CFX_ByteString Decode(CBC_BinaryBitmap* image,
                         FX_BOOL multiple,
                         int32_t hints,
                         int32_t& e);
-  CFX_ByteString Decode(CBC_BinaryBitmap* image, int32_t hints, int32_t& e);
 
  private:
   static int32_t getMaxWidth(CBC_ResultPoint* p1, CBC_ResultPoint* p2);
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417ResultMetadata.h b/xfa/fxbarcode/pdf417/BC_PDF417ResultMetadata.h
index 924f25f..92f4ea4 100644
--- a/xfa/fxbarcode/pdf417/BC_PDF417ResultMetadata.h
+++ b/xfa/fxbarcode/pdf417/BC_PDF417ResultMetadata.h
@@ -13,6 +13,7 @@
  public:
   CBC_PDF417ResultMetadata();
   virtual ~CBC_PDF417ResultMetadata();
+
   int32_t getSegmentIndex();
   void setSegmentIndex(int32_t segmentIndex);
   CFX_ByteString getFileId();
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417ScanningDecoder.h b/xfa/fxbarcode/pdf417/BC_PDF417ScanningDecoder.h
index aa99d5a..d136630 100644
--- a/xfa/fxbarcode/pdf417/BC_PDF417ScanningDecoder.h
+++ b/xfa/fxbarcode/pdf417/BC_PDF417ScanningDecoder.h
@@ -22,6 +22,7 @@
  public:
   CBC_PDF417ScanningDecoder();
   virtual ~CBC_PDF417ScanningDecoder();
+
   static void Initialize();
   static void Finalize();
   static CBC_CommonDecoderResult* decode(CBC_CommonBitMatrix* image,
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417Writer.h b/xfa/fxbarcode/pdf417/BC_PDF417Writer.h
index 7f71959..e16c514 100644
--- a/xfa/fxbarcode/pdf417/BC_PDF417Writer.h
+++ b/xfa/fxbarcode/pdf417/BC_PDF417Writer.h
@@ -14,12 +14,16 @@
 class CBC_PDF417Writer : public CBC_TwoDimWriter {
  public:
   CBC_PDF417Writer();
-  virtual ~CBC_PDF417Writer();
+  ~CBC_PDF417Writer() override;
+
   uint8_t* Encode(const CFX_WideString& contents,
                   int32_t& outWidth,
                   int32_t& outHeight,
                   int32_t& e);
-  FX_BOOL SetErrorCorrectionLevel(int32_t level);
+
+  // CBC_TwoDimWriter
+  FX_BOOL SetErrorCorrectionLevel(int32_t level) override;
+
   void SetTruncated(FX_BOOL truncated);
 
  private:
diff --git a/xfa/fxbarcode/qrcode/BC_QRAlignmentPattern.h b/xfa/fxbarcode/qrcode/BC_QRAlignmentPattern.h
index 9a4e80c..7006b72 100644
--- a/xfa/fxbarcode/qrcode/BC_QRAlignmentPattern.h
+++ b/xfa/fxbarcode/qrcode/BC_QRAlignmentPattern.h
@@ -15,10 +15,14 @@
   CBC_QRAlignmentPattern(FX_FLOAT posX,
                          FX_FLOAT posY,
                          FX_FLOAT estimateModuleSize);
-  virtual ~CBC_QRAlignmentPattern();
+  ~CBC_QRAlignmentPattern() override;
+
+  // CBC_ResultPoint
+  FX_FLOAT GetX() override;
+  FX_FLOAT GetY() override;
+
   FX_BOOL AboutEquals(FX_FLOAT moduleSize, FX_FLOAT i, FX_FLOAT j);
-  FX_FLOAT GetX();
-  FX_FLOAT GetY();
+
   CBC_QRAlignmentPattern* Clone();
 };
 
diff --git a/xfa/fxbarcode/qrcode/BC_QRCodeReader.h b/xfa/fxbarcode/qrcode/BC_QRCodeReader.h
index c11ccd1..b3a72b4 100644
--- a/xfa/fxbarcode/qrcode/BC_QRCodeReader.h
+++ b/xfa/fxbarcode/qrcode/BC_QRCodeReader.h
@@ -22,7 +22,8 @@
 
  public:
   CBC_QRCodeReader();
-  virtual ~CBC_QRCodeReader();
+  ~CBC_QRCodeReader() override;
+
   CFX_ByteString Decode(CFX_DIBitmap* pBitmap,
                         int32_t hints,
                         int32_t byteModeDecode,
@@ -32,8 +33,12 @@
                         int32_t byteModeDecode,
                         int32_t& e);
   static void ReleaseAll();
-  CFX_ByteString Decode(CBC_BinaryBitmap* image, int32_t hints, int32_t& e);
-  CFX_ByteString Decode(CBC_BinaryBitmap* image, int32_t& e);
+
+  // CBC_Reader
+  CFX_ByteString Decode(CBC_BinaryBitmap* image,
+                        int32_t hints,
+                        int32_t& e) override;
+  CFX_ByteString Decode(CBC_BinaryBitmap* image, int32_t& e) override;
   virtual void Init();
 };
 
diff --git a/xfa/fxbarcode/qrcode/BC_QRCodeWriter.h b/xfa/fxbarcode/qrcode/BC_QRCodeWriter.h
index c68c6c0..6562107 100644
--- a/xfa/fxbarcode/qrcode/BC_QRCodeWriter.h
+++ b/xfa/fxbarcode/qrcode/BC_QRCodeWriter.h
@@ -13,7 +13,8 @@
 class CBC_QRCodeWriter : public CBC_TwoDimWriter {
  public:
   CBC_QRCodeWriter();
-  virtual ~CBC_QRCodeWriter();
+  ~CBC_QRCodeWriter() override;
+
   uint8_t* Encode(const CFX_WideString& contents,
                   int32_t ecLevel,
                   int32_t& outWidth,
@@ -31,7 +32,10 @@
                   int32_t& outHeight,
                   int32_t& e);
   FX_BOOL SetVersion(int32_t version);
-  FX_BOOL SetErrorCorrectionLevel(int32_t level);
+
+  // CBC_TwoDimWriter
+  FX_BOOL SetErrorCorrectionLevel(int32_t level) override;
+
   static void ReleaseAll();
 
  private:
diff --git a/xfa/fxbarcode/qrcode/BC_QRDataMask.cpp b/xfa/fxbarcode/qrcode/BC_QRDataMask.cpp
index 9b5e3ca..e21b5d2 100644
--- a/xfa/fxbarcode/qrcode/BC_QRDataMask.cpp
+++ b/xfa/fxbarcode/qrcode/BC_QRDataMask.cpp
@@ -67,46 +67,52 @@
 
 class DataMask000 : public CBC_QRDataMask {
  public:
-  FX_BOOL IsMasked(int32_t x, int32_t y) { return ((x + y) % 2) == 0; }
+  // CBC_QRDataMask
+  FX_BOOL IsMasked(int32_t x, int32_t y) override;
 };
+
 class DataMask001 : public CBC_QRDataMask {
  public:
-  FX_BOOL IsMasked(int32_t x, int32_t y) { return (x % 2) == 0; }
+  // CBC_QRDataMask
+  FX_BOOL IsMasked(int32_t x, int32_t y) override;
 };
+
 class DataMask010 : public CBC_QRDataMask {
  public:
-  FX_BOOL IsMasked(int32_t x, int32_t y) { return y % 3 == 0; }
+  // CBC_QRDataMask
+  FX_BOOL IsMasked(int32_t x, int32_t y) override;
 };
+
 class DataMask011 : public CBC_QRDataMask {
  public:
-  FX_BOOL IsMasked(int32_t x, int32_t y) { return (x + y) % 3 == 0; }
+  // CBC_QRDataMask
+  FX_BOOL IsMasked(int32_t x, int32_t y) override;
 };
+
 class DataMask100 : public CBC_QRDataMask {
  public:
-  FX_BOOL IsMasked(int32_t x, int32_t y) {
-    return (((x >> 1) + (y / 3)) % 2) == 0;
-  }
+  // CBC_QRDataMask
+  FX_BOOL IsMasked(int32_t x, int32_t y) override;
 };
+
 class DataMask101 : public CBC_QRDataMask {
  public:
-  FX_BOOL IsMasked(int32_t x, int32_t y) {
-    size_t temp = x * y;
-    return (temp % 2) + (temp % 3) == 0;
-  }
+  // CBC_QRDataMask
+  FX_BOOL IsMasked(int32_t x, int32_t y) override;
 };
+
 class DataMask110 : public CBC_QRDataMask {
  public:
-  FX_BOOL IsMasked(int32_t x, int32_t y) {
-    size_t temp = x * y;
-    return (((temp % 2) + (temp % 3)) % 2) == 0;
-  }
+  // CBC_QRDataMask
+  FX_BOOL IsMasked(int32_t x, int32_t y) override;
 };
+
 class DataMask111 : public CBC_QRDataMask {
  public:
-  FX_BOOL IsMasked(int32_t x, int32_t y) {
-    return ((((x + y) % 2) + ((x * y) % 3)) % 2) == 0;
-  }
+  // CBC_QRDataMask
+  FX_BOOL IsMasked(int32_t x, int32_t y) override;
 };
+
 int32_t CBC_QRDataMask::BuildDataMasks() {
   DATA_MASKS->Add(new DataMask000);
   DATA_MASKS->Add(new DataMask001);
@@ -118,5 +124,41 @@
   DATA_MASKS->Add(new DataMask111);
   return DATA_MASKS->GetSize();
 }
+
 CBC_QRDataMask::CBC_QRDataMask() {}
+
 CBC_QRDataMask::~CBC_QRDataMask() {}
+
+FX_BOOL DataMask000::IsMasked(int32_t x, int32_t y) {
+  return ((x + y) % 2) == 0;
+}
+
+FX_BOOL DataMask001::IsMasked(int32_t x, int32_t y) {
+  return (x % 2) == 0;
+}
+
+FX_BOOL DataMask010::IsMasked(int32_t x, int32_t y) {
+  return y % 3 == 0;
+}
+
+FX_BOOL DataMask011::IsMasked(int32_t x, int32_t y) {
+  return (x + y) % 3 == 0;
+}
+
+FX_BOOL DataMask100::IsMasked(int32_t x, int32_t y) {
+  return (((x >> 1) + (y / 3)) % 2) == 0;
+}
+
+FX_BOOL DataMask101::IsMasked(int32_t x, int32_t y) {
+  size_t temp = x * y;
+  return (temp % 2) + (temp % 3) == 0;
+}
+
+FX_BOOL DataMask110::IsMasked(int32_t x, int32_t y) {
+  size_t temp = x * y;
+  return (((temp % 2) + (temp % 3)) % 2) == 0;
+}
+
+FX_BOOL DataMask111::IsMasked(int32_t x, int32_t y) {
+  return ((((x + y) % 2) + ((x * y) % 3)) % 2) == 0;
+}
diff --git a/xfa/fxbarcode/qrcode/BC_QRFinderPattern.h b/xfa/fxbarcode/qrcode/BC_QRFinderPattern.h
index 0dc2f3c..f02a229 100644
--- a/xfa/fxbarcode/qrcode/BC_QRFinderPattern.h
+++ b/xfa/fxbarcode/qrcode/BC_QRFinderPattern.h
@@ -16,11 +16,13 @@
 
  public:
   CBC_QRFinderPattern(FX_FLOAT x, FX_FLOAT posY, FX_FLOAT estimatedModuleSize);
-  virtual ~CBC_QRFinderPattern();
+  ~CBC_QRFinderPattern() override;
+
+  // CBC_ResultPoint
+  FX_FLOAT GetX() override;
+  FX_FLOAT GetY() override;
 
   int32_t GetCount() const;
-  FX_FLOAT GetX();
-  FX_FLOAT GetY();
   FX_FLOAT GetEstimatedModuleSize();
   void IncrementCount();
   FX_BOOL AboutEquals(FX_FLOAT moduleSize, FX_FLOAT i, FX_FLOAT j);
