纯虚函数实现接口类:接口编程实战演练

公共的接口要求

//SocketProtocol.h
#pragma once

class SocketIF
{
public:
	//客户端初始化 获取handle 上下文信息
	virtual int cltSocketInit() = 0;

	//客户端发报文
	virtual int cltSocketSend(unsigned char *buf, int buflen) = 0;

	//客户端收报文
	virtual int cltSocketRev(unsigned char *buf, int *buflen) = 0;

	//客户端释放资源
	virtual int cltSocketDestory() = 0;
};

厂商1要求的接口原型

//SocketImp1.h
#pragma once
#include "socketprotocol.h"

class SocketImp1 :public SocketIF
{
public:
	SocketImp1(void);
	~SocketImp1(void);

public:
	int cltSocketInit();

	//客户端发报文
	int cltSocketSend(unsigned char *buf, int buflen);

	//客户端收报文
	int cltSocketRev(unsigned char *buf, int *buflen);

	//客户端释放资源
	int cltSocketDestory();
private:
	char *pcommon;
	int len;
};

接口实现

//SocketImp1.cpp
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "SocketImp1.h"

SocketImp1::SocketImp1(void)
{
}

SocketImp1::~SocketImp1(void)
{
}

int SocketImp1::cltSocketInit()
{
	return 0;
}

//客户端发报文
int SocketImp1::cltSocketSend(unsigned char *buf, int buflen)
{
	pcommon = (char *)malloc((buflen + 1)*sizeof(char));
	//pcommon[len-1] = 0;
	len = buflen;
	memcpy(pcommon, buf, buflen);
	return 0;
}

//客户端收报文
int SocketImp1::cltSocketRev(unsigned char *buf, int *buflen)
{
	memcpy(buf, pcommon, len);
	*buflen = len;
	return 0;
}

//客户端释放资源
int SocketImp1::cltSocketDestory()
{
	if (pcommon != NULL)
	{
		delete[] pcommon;
	}
	return 0;
}

测试文件

//mainclass.cpp
#define _CRT_SECURE_NO_WARNINGS
#include "iostream"
#include "SocketImp1.h"
#include "SocketProtocol.h"
using namespace std;

//主框架
void mainOP01()
{
	SocketIF *sIf = new SocketImp1();

	unsigned char buf[1024];
	strcpy((char *)buf, "ddddddddddddddsssssssssssssssssssss");
	int buflen = 10;

	unsigned char out[1024];
	int outlen = 10;
	sIf->cltSocketInit();
	sIf->cltSocketSend(buf, buflen);
	sIf->cltSocketRev(out, &outlen);
	sIf->cltSocketDestory();

}

int mainOP02(SocketIF *sIf, unsigned char *in, int inlen, unsigned char *out, int *outlen)
{
	int ret = 0;
	ret = sIf->cltSocketInit();
	ret = sIf->cltSocketSend(in, inlen);
	ret = sIf->cltSocketRev(out, outlen);
	ret = sIf->cltSocketDestory();
	return ret;

}

void main()
{
	SocketIF *sIf = new SocketImp1();

	unsigned char buf[1024] = { 0 };
	strcpy((char *)buf, "ddddddddddddddsssssssssssssssssssss");
	int buflen = 10;

	unsigned char out[1024] = { 0 };
	int outlen = 10;

	mainOP02(sIf, buf, buflen, out, &outlen);

	printf("out:%s\n", out);
	delete sIf;
	system("pause");
}
时间: 2024-08-24 19:45:06

纯虚函数实现接口类:接口编程实战演练的相关文章

虚函数、纯虚函数、抽象类、接口 (Java_C++_C#)

在OOP编程语言中,多态是很重要的OOP思想.而多态的语法支持离不开虚函数.每次都把什么虚函数,抽象类搞混,这次好好整理下! -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

C++ 虚函数&amp;纯虚函数&amp;抽象类&amp;接口&amp;虚基类(转)

http://www.cnblogs.com/fly1988happy/archive/2012/09/25/2701237.html 1. 多态 在面向对象语言中,接口的多种不同实现方式即为多态.多态是指,用父类的指针指向子类的实例(对象),然后通过父类的指针调用实际子类的成员函数. 多态性就是允许将子类类型的指针赋值给父类类型的指针,多态是通过虚函数实现的. 多态可以让父类的指针有“多种形态”,这是一种泛型技术.(所谓泛型技术,就是试图使用不变的代码来实现可变的算法). 2. 虚函数 2.1

虚函数/纯虚函数/抽象类/接口/虚基类

1.多态 在面向对象语言中,接口的多种不同实现方式即为多态.多态是指,用父类的指针指向子类的实例(对象),然后通过父类的指针调用实际子类的成员函数. 在Java中,没有指针,就直接用父类实例化子类对象 多态性就是允许将子类类型的指针赋值给父类类型的指针,多态是通过虚函数实现的,多态可以让父类的指针有“多种形态”,这是一种泛型技术. 所谓泛型技术,就是试图使用不变的代码来实现可变的算法 2.虚函数 在基类的类定义中,定义虚函数的一般形式: Virtual 函数返回值类型 虚函数名(形参表){ 函数

C++ 虚函数 、纯虚函数、接口的实用方法和意义

也许之前我很少写代码,更很少写面向对象的代码,即使有写多半也很容易写回到面向过程的老路上去.在写面向过程的代码的时候,根本不管什么函数重载和覆盖,想到要什么功能就变得法子的换个函数名字,心里想想:反正函数重载本质也就是入栈了两个不同的函数. 回过头来讲,让我了解标题这三个概念的实际用处,还是在于我这第四次重写毕业论文的代码,将它改写成面向对象的时候,才理解的.在面向对象设计的过程中, 类是从抽象逐渐具体起来的,父类可以是非常非常抽象的东西,而最终实例化的子类就非常具体了.在这个继承的过程中,不断

C++:抽象基类和纯虚函数的理解

转载地址:http://blog.csdn.net/acs713/article/details/7352440 抽象类是一种特殊的类,它是为了抽象和设计的目的为建立的,它处于继承层次结构的较上层. ⑴抽象类的定义: 称带有纯虚函数的类为抽象类. ⑵抽象类的作用: 抽象类的主要作用是将有关的操作作为结果接口组织在一个继承层次结构中,由它来为派生类提供一个公共的根,派生类将具体实现在其基类中作为接口的操作.所以派生类实际上刻画了一组子类的操作接口的通用语义,这些语义也传给子类,子类可以具体实现这些

【C/C++学院】0823-静态联合编译与动态联合编译/父类指针子类指针释放/虚函数/纯虚函数概念以及虚析构函数/抽象类与纯虚函数以及应用/虚函数原理/虚函数分层以及异质链表/类模板的概念以及应用

静态联合编译与动态联合编译 #include <iostream> #include <stdlib.h> //散列 void go(int num) { } void go(char *str) { } //class //::在一个类中 class A { public: void go(int num) { } void go(char *str) { } }; void main() { ///auto p = go;编译的阶段,静态联编 void(*p1)(char *s

静态联编,动态联编,类指针之间的关系,虚函数与多态性,纯虚函数,虚析构函数

1.静态联编,是程序的匹配,连接在编译阶段实现,也称为早期匹配.重载函数使用静态联编. 2.动态联编是指程序联编推迟到运行时进行,所以又称为晚期联编.switch语句和if语句是动态联编的例子. #include<iostream> void go(int num) { } void go(char *str) { } //class //::在一个类中 class A { public: void go(int num) { } void go(char *str) { } }; void

&lt;C++&gt; 类(3):初始化列表 常函数和常量对象 虚函数与多态(包括纯虚函数)

一.初始化列表(初始化列表中必须有的两个内容) 1.类中const的成员变量: ①特点:不能修改 必须初始化 在构造函数后面加冒号 格式为:":变量名(值)" 也就是说 常量必须在初始化列表中初始化 ②执行顺序:构造函数先执行初始化列表 然后执行函数中的内容 1 #include<iostream> 2 using namespace std; 3 4 class CPerson 5 { 6 public: 7 const int a; 8 public: 9 CPerso

C++中的 虚函数 纯虚函数 虚基类(virtual)

前言:需要了解三者的区别,必须要掌握多态的三个必要条件: 继承 重载 父类指针指向子类对象. 虚函数 纯虚函数 虚基类三者区别 1.虚函数是用于多态中virtual修饰父类函数,确保父类指针调用子类对象时,运行子类函数的. 2.纯虚函数是用来定义接口的,也就是基类中定义一个纯虚函数,基类不用实现,让子类来实现. 3.虚基类是用来在多继承中,比如菱形继承中,如果两个父类继承自同一个类,就只实例化一个父类 ①虚函数第一个是没有使用多态(只用继承)的一般实现方式: class A { public:

第十三周项目2:形状类族中的纯虚函数

问题及代码: /* *Copyright (c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:project.cpp *作 者:陈文青 *完成日期:2015年6月3日 *版 本 号:v1.0 * *问题描述:写一个程序,定义抽象基类Shape,由它派生出3个派生类,Circle(圆形).Rectangle(矩形).Triangle(三角形). 用如下的main()函数,求出定义的几个几何体的面积和. *程序输入: *程序输出: */ #inclu