zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【C++实践】C++代码接口封装 — “父类声明纯虚函数”法

C++封装接口代码 函数 实践 声明 父类
2023-09-14 09:14:31 时间

目录

1、实现父类声明纯虚函数法

 2、打包生成静态库.a,供开发者调用


1、实现父类声明纯虚函数法

在代码的开发过程中,会遇到接口封装的问题,而把父类声明纯虚函数就是封装的一种方式;

下面通过居体实例来了解接口封装:

例如:封装两个接口函数,Add函数实现两个数相加,Sub实现两个数相减;

首先定义父类纯虚函数接口:

COperator.h

#ifndef COPERATOR_H
#define COPERATOR_H


class Operator
{
public:
    Operator(void);
    virtual ~Operator(void);

    virtual double Add(double a,double b) = 0;
    virtual double Sub(double a,double b) = 0;
};

Operator *Create();

#endif // COPERATOR_H

COperator.cpp

#include "COperator.h"
#include "baseoperator.h"

Operator::Operator()
{

}

Operator::~Operator()
{

}

Operator * Create()
{
  return new BaseOperator;
}

子类继承父类实现虚拟接口方法: 

baseoperator.h

#ifndef BASEOPERATOR_H
#define BASEOPERATOR_H

#include "COperator.h"

class BaseOperator : public Operator
{
public:
    BaseOperator(void);
    virtual ~BaseOperator(void);

    virtual double Add(double a,double b);
    virtual double Sub(double a,double b);

private:

};

#endif // BASEOPERATOR_H2

baseoperator.cpp

#include "baseoperator.h"

BaseOperator::BaseOperator()
{

}

BaseOperator::~BaseOperator()
{

}

double BaseOperator::Add(double a, double b)
{
    return a + b;
}

double BaseOperator::Sub(double a, double b)
{
    return a - b;
}

main.cpp

#include <QApplication>
#include "COperator.h"
#include <QDebug>
 
int main(int argc,char *argv[])
{
    QApplication a(argc, argv);
    Operator *op = Create();
 
    if(op != nullptr)
    {
        double num = op->Add(34,56);
        qDebug() << "add:" << num;
 
        double sub = op->Sub(78,23);
        qDebug() << "sub:" << sub;
    }
 
 
    return a.exec();
}

测试结果:

 2、打包生成静态库.a,供开发者调用

g++ -c COperator.cpp baseoperator.cpp
ar -crv liboperator.a baseoperator.o COperator.o

 生成静态库如上。

你只需要把父类纯虚函数接口和静态库提供给别人,就可以使用接口;

测试如下:

pro文件

QT       += core
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

SOURCES += \
        main.cpp \

HEADERS += \
        COperator.h

LIBS += $$PWD/liboperator.a

main.cpp 

#include <QApplication>
#include "COperator.h"
#include <QDebug>

int main(int argc,char *argv[])
{
    QApplication a(argc, argv);
    Operator *op = Create();

    if(op != nullptr)
    {
        double num = op->Add(34,56);
        qDebug() << "add:" << num;

        double sub = op->Sub(78,23);
        qDebug() << "sub:" << sub;
    }


    return a.exec();
}