【C++实践】C++代码接口封装 — “父类声明纯虚函数”法
2023-09-14 09:14:31 时间
目录
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();
}
相关文章
- C++学习——c++逗号操作符说明(附加全部运算符优先级)
- c++中按位取反_取反和按位取反
- 详解二叉树遍历(C/C++)
- 深入理解C++11_c++ string char
- c++ auto类型_auto C++
- C++stl库_c++库
- C++ 使用栈求解中缀、后缀表达式的值
- C/C++ 内存读写Lib库简单封装
- C++ Boost 文件系统相关函数
- C/C++生态工具链——接口模拟工具gmock
- C++基础——C++面向对象之数据封装、数据抽象与接口基础总结
- 【C++】list迭代器的深度剖析及模拟实现(感受类封装,类和对象的思想)
- 排序算法的实现(C/C++实现)详解编程语言
- C++ set_intersection(STL set_intersection)用法详解
- C++ int,short,long(详解版)
- 养成良好的C++编程习惯之内存管理的应用详解
- 深入理解:Java是类型安全的语言,而C++是非类型安全的语言
- operatornew在C++中的各种写法总结
- C/C++判断传入的UTC时间是否当天的实现方法
- C++选择文件夹代码的封装
- C++封装IATHOOK类实例